如何在 SQLite 中获取列 X 与列 Y 的比率?
How to obtain ratio of column X over column Y in SQLlite?
我应该得到以下结果:
人口统计:男女比例
编写一个查询,显示 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
此预览仅限五行。
A select * from population 以这种格式显示基础数据:
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
.....以此类推,从 0-100 岁开始,适用于 1970-2018 年的所有年份。州是 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
(sqlite3.OperationalError) near "as": syntax error
[SQL: 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]
我采纳了 Esteban P 的建议并使用了:
select 县,(SUM(CAST(pop_male AS float)) / SUM(CAST(pop_female AS float))) 作为比率
来自各县的人口组,年龄 > 18 且年份 = 2018 按比率排序
这成功了。
不想覆盖 SQLRaptor 在评论中的有用回复,但为了完整起见:)
SQL 将整数除法视为整数,因此将其截断。为避免这种情况——将至少一个值转换为浮点数据类型(例如 SQLite 的 REAL 或 FLOAT——请在此处查看数据类型手册:https://www.sqlite.org/datatype3.html)
我应该得到以下结果: 人口统计:男女比例 编写一个查询,显示 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
此预览仅限五行。
A select * from population 以这种格式显示基础数据:
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
.....以此类推,从 0-100 岁开始,适用于 1970-2018 年的所有年份。州是 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 (sqlite3.OperationalError) near "as": syntax error [SQL: 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]
我采纳了 Esteban P 的建议并使用了:
select 县,(SUM(CAST(pop_male AS float)) / SUM(CAST(pop_female AS float))) 作为比率 来自各县的人口组,年龄 > 18 且年份 = 2018 按比率排序
这成功了。
不想覆盖 SQLRaptor 在评论中的有用回复,但为了完整起见:)
SQL 将整数除法视为整数,因此将其截断。为避免这种情况——将至少一个值转换为浮点数据类型(例如 SQLite 的 REAL 或 FLOAT——请在此处查看数据类型手册:https://www.sqlite.org/datatype3.html)