如何在SQLlite中获取X列与Y列的比率?

时间:2019-03-26 22:56:34

标签: sql sqlite average calculated-columns

我应该获得以下结果: 人口特性:男女比例 编写查询以显示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按比例排序

这有效。

1 个答案:

答案 0 :(得分:4)

不想在注释中覆盖SQLRaptor的有用响应,但是为了完整性:)

SQL将整数除法视为整数,因此将其截断。为避免这种情况-将至少一个值转换为浮点数据类型(例如SQLite的REAL或FLOAT)-在此处查看有关数据类型的手册:https://www.sqlite.org/datatype3.html