我正在从 MYSQL 表中执行 SELECT
表格是这样的
year tour starts scoring_avg
1990 EUR 5 71.56
1990 USA 6 0.0
1991 EUR 12 71.21
1991 USA 8 69.23
我正在做这样的 SELECT
SELECT
year,
SUM(starts),
SUM(starts*scoring_avg) as scoring.avg
FROM scores
GROUP BY year
目标是获得当年的综合得分平均值,结合每年的欧元和美国行。
在 SELECT 之后,我将 scoring_avg 除以开始。由于我从第二行开始添加了 6,而该行没有 scoring_avg,因此结果不正确。
1991 年工作正常。 不适用于 1990 年,因为美国行的 scoring_avg 为 0。
有没有一种方法可以将 SELECT 修改为仅使用 SUM 中的 ps.starts*ps.scoring_avg,其中该行中的 ps.scoring_avg 大于 0?
谢谢。
-- 埃德
最佳答案
如果您只想更改scoringavg
,请使用条件聚合:
SELECT year, SUM(starts),
SUM(case when scoring_avg > 0 then starts*scoring_avg end) as scoring_avg
FROM scores
GROUP BY year;
但是,我建议在单个查询中完成所有工作,之后不要进行任何除法。以下计算您想要的平均值:
SELECT year, SUM(starts),
(SUM(case when scoring_avg > 0 then starts*scoring_avg end) /
SUM(scoring_avg > 0)
) as scoring_avg
FROM scores
GROUP BY year;
关于如果乘以零,MYSQL 避免 SELECT 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25595605/