计算女性总体占比
在单个 select 语句中同时组合函数和运算符也是可行的。
当我们需要计算百分比或平均值时,这种组合非常实用;我们还可以使用 case() 表达式,仅对满足特定条件的数据进行运算,而不影响整体查询。
case() 表达式接收一个用于匹配的条件列表以及条件匹配时要返回的列,随后是当所有条件都不匹配时的 else_。我们可以把整个表达式包裹在任意函数或数学运算中。
在进行整数除法时,我们通常希望得到浮点数。虽然有些数据库会自动完成这一点,您也可以使用 cast() 函数将表达式转换为特定类型。
本练习是课程的一部分
Python 中的数据库入门
练习说明
- 从
sqlalchemy导入case、cast和Float。 - 构建表达式
female_pop2000来计算 2000 年的女性人口。为此:- 在
func.sum()内使用case()。 case()的第一个参数是一个列表,包含一个二元组:- i) 一个布尔表达式,检查
census.columns.sex是否等于'F'。 - ii) 列
census.columns.pop2000。
- i) 一个布尔表达式,检查
- 第二个参数是
else_条件,应设为 0。
- 在
- 计算 2000 年的总人口,并使用
cast()将其转换为Float。 - 构建查询以计算 2000 年女性所占百分比。做法是用
female_pop2000除以total_pop2000,再乘以100。 - 执行查询并打印
percent_female。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# import case, cast and Float from sqlalchemy
from sqlalchemy import ____, ____, ____
# Build an expression to calculate female population in 2000
female_pop2000 = func.sum(
____([
(____ == ____, ____)
], else_=____))
# Cast an expression to calculate total population in 2000 to Float
total_pop2000 = cast(func.sum(____), ____)
# Build a query to calculate the percentage of women in 2000: stmt
stmt = select([____ / ____* 100])
# Execute the query and store the scalar result: percent_female
percent_female = connection.execute(____).scalar()
# Print the percentage
print(____)