我应该获得以下结果: 人口特性:男女比例 编写查询以显示2018年各县的18岁以上男女比例(pop_male除以pop_female)。将结果从最大女性到最大男性县进行排序。
county ratio
0 MADERA 0.909718
1 YOLO 0.932634
2 CONTRA COSTA 0.936229
3 SACRAMENTO 0.943243
4 SHASTA 0.944123
此预览仅限于五行。
从总体中选择*将以以下格式显示基本数据:
fips county year age pop_female pop_male pop_total
0 6001 ALAMEDA 1970 0 8533 8671 17204
1 6001 ALAMEDA 1970 1 8151 8252 16403
2 6001 ALAMEDA 1970 2 7753 8015 15768
3 6001 ALAMEDA 1970 3 8018 8412 16430
4 6001 ALAMEDA 1970 4 8551 8648 17199
......依此类推,从1970-2018年的所有年份为0-100。州为CA
我尝试使用:
select county, (sum(pop_male) / sum(pop_female)) as ratio
from population group by county, year having age > 18 and year = 2018;
输出改为:
county ratio
ALAMEDA 0
ALPINE 1
AMADOR 1
BUTTE 0
CALAVERAS 0
COLUSA 1
CONTRA COSTA 0
注意:我知道我尚未完成任何命令,因为我什至没有输出正确的数据。
SQLRaptor给了我一个建议,我尝试了:
select county, (CAST(sum(pop_male) AS DECIMAL(1,6)) / (CAST(sum(pop_female) AS DECIMAL(1,6)) as ratio
from population group by county, year having age > 18 and year = 2018
这给了我答复:
sqlite:///../Databases/population.sqlite3 (as)附近的(sqlite3.OperationalError):语法错误 [SQL:选择县,以(CAST(sum(pop_male)AS DECIMAL(1,6))/(CAST(sum(pop_female)AS DECIMAL(1,6)))作为比率 来自各县的人口组,年龄大于18岁且年份= 2018]
我接受Esteban P的建议并使用:
选择县,以(SUM(CAST(pop_male AS float))/ SUM(CAST(pop_male AS float)))作为比率 来自各县的人口组,年龄> 18岁且年份= 2018按比例排序
这有效。
答案 0 :(得分:4)
不想在注释中覆盖SQLRaptor的有用响应,但是为了完整性:)
SQL将整数除法视为整数,因此将其截断。为避免这种情况-将至少一个值转换为浮点数据类型(例如SQLite的REAL或FLOAT)-在此处查看有关数据类型的手册:https://www.sqlite.org/datatype3.html)