如何在 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)