SQL聚合SUM函数输出不正确?

问题描述 投票:0回答:1

我有三个表: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 语句中的聚合函数有问题,还是我遗漏了其他内容?如果这是显而易见的事情,我深表歉意 - 我是一个相对初学者,我找不到任何类似的问题以及对我有用的答案。

mysql inner-join aggregate-functions
1个回答
0
投票

多亏了 Shadow,答案只是population 变量被错误地转换为文本而不是整数。谢谢大家!

© www.soinside.com 2019 - 2024. All rights reserved.