我有三个表:crash_table 包含从 2009 年到 2024 年每天的车祸数量,date_table 包含日期信息(我用它来从 crash_table 中的日期值中获取年份),population_table 包含总人口每年。
日期 | 严重性 | 崩溃 |
---|---|---|
2009 年 1 月 1 日 | 仅限财产损失 | 66 |
2009 年 1 月 1 日 | 重伤 | 2 |
2017 年 11 月 5 日 | 轻伤 | 10 |
等等。
日期表如下所示:
日期 | 年份 | 月 | 星期几 |
---|---|---|---|
2009 年 1 月 1 日 | 2009 | 一月 | 星期四 |
2009 年 1 月 2 日 | 2009 | 一月 | 周五 |
等等。
人口表如下所示:
年份 | 人口 |
---|---|
2009 | 3,032,870 |
2010 | 3,050,819 |
等等。
我的目标是获得一张显示每年以及每年估计人均车祸率的表格。为此,我编写了以下 SQL 查询:
SELECT p.Year,
(SUM(c.Crashes) / ANY_VALUE(p.Population)) AS `Crashes per Capita`
FROM crash_table c
INNER JOIN date_table d ON c.Date = d.Date
INNER JOIN population_table p ON d.Year = p.Year
WHERE p.Year != 2024
GROUP BY p.Year;
我在 SELECT 语句中将 ANY.VALUE() 放在人口周围,以避免由 ONLY_FULL_GROUP_BY 设置引起的错误。
我从这个查询中得到的表输出显然是不正确的; “人均崩溃次数”列值均为数万,而我预计该值远小于零。
结果表如下所示:
年份 | 人均车祸次数 |
---|---|
2009 | 18498 |
2010 | 18132 |
我预计人均值将落在 0.01 到 0.02 左右。
是 SELECT 语句中的聚合函数有问题,还是我遗漏了其他内容?如果这是显而易见的事情,我深表歉意 - 我是一个相对初学者,我找不到任何类似的问题以及对我有用的答案。
多亏了 Shadow,答案只是population 变量被错误地转换为文本而不是整数。谢谢大家!