如果乘以零,MYSQL 避免 SELECT 计算

标签 mysql sql select

我正在从 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/

相关文章:

sql - 从两个不同的查询获取信息

php - 显示类(class)注册学生总数

mysql - 使用 C++ Builder 在 Windows 上编译 MySQL

php - Mysql_fetch_array,assoc,row 在从 db 获取后对数组进行排序

mysql - 使用 MS SQL Server 中的数据更新 MySQL

javascript - 删除选择列表中的向下箭头

php - 查找数字在两列中出现的总次数

sql - 如何选择如何在sql中填充#temptable?

html - 在 CSS 问题中为 <select> 设置样式

python - `.select_by_visible_text()` 选择元素失败?