SQLite中SUM聚合函数计算结果异常问题求助
问题原因及解决办法
你的问题出在JOIN操作导致数据行重复,进而让SUM计算重复累加了酸奶产量值。
举个例子:假设某州在yogurt_production里只有1条2022年的产量数据(比如值为100),但在cheese_production里同州同年份有3条数据。JOIN之后,这条酸奶数据会被复制3条和奶酪数据匹配,SUM的时候就会把100加3次,最终得到300,而不是真实的100。
解决办法分两种情况:
情况1:只需要计算酸奶总产量(不需要奶酪数据)
直接去掉多余的JOIN,只查询酸奶表即可:
SELECT SUM(yp.Value) AS total_yogurtprod, yp.Year FROM yogurt_production yp WHERE yp.Year = 2022
情况2:确实需要关联奶酪表(比如要同时获取奶酪相关数据)
先对酸奶表按州和年份聚合求和,再关联奶酪表,避免重复计算:
SELECT yp_agg.total_yogurtprod, yp_agg.Year FROM ( -- 先计算每个州的酸奶产量,再关联 SELECT SUM(Value) AS total_yogurtprod, Year, State_ANSI FROM yogurt_production WHERE Year = 2022 GROUP BY Year, State_ANSI ) yp_agg JOIN cheese_production cp ON yp_agg.State_ANSI = cp.State_ANSI WHERE cp.Year = 2022
如果需要的是全国范围内的酸奶总产量,子查询里可以去掉State_ANSI的分组:
SELECT yp_agg.total_yogurtprod, yp_agg.Year FROM ( SELECT SUM(Value) AS total_yogurtprod, Year FROM yogurt_production WHERE Year = 2022 ) yp_agg JOIN cheese_production cp ON yp_agg.Year = cp.Year WHERE cp.Year = 2022
内容的提问来源于stack exchange,提问作者mattz
相关产品推荐
相关产品推荐

