MySQL SUM left join 显示所有类别即使总和为0

标签 mysql sum left-join

我希望根据一组数据的得分总和来选择所有类别,即使该数据集不包含类别。但是,无论我尝试什么,它总是只显示具有实际数据的类别。

我创建了以下 SQLFiddle http://sqlfiddle.com/#!9/52a127/3

为了便于查看,我将在此处粘贴select 语句:

SELECT categories.id, IFNULL(SUM(raw_data.score), 0) as total
FROM categories
LEFT JOIN raw_data ON categories.id = raw_data.category_id
WHERE
(raw_data.quarter = '2018Q2' OR !raw_data.quarter) AND
raw_data.broker_id = 2 
GROUP BY categories.id
ORDER BY total DESC

正如您从 fiddle 中看到的那样,它只显示 2 个类别,但我希望选择所有 6 个类别,并为没有结果的类别设置 0。

感谢任何帮助,谢谢!

最佳答案

您需要将条件从 WHERE 移动到 ON 子句:

SELECT categories.id, IFNULL(SUM(raw_data.score), 0) as total
FROM categories
LEFT JOIN raw_data ON categories.id = raw_data.category_id
  AND (raw_data.quarter = '2018Q2' OR !raw_data.quarter) 
  AND raw_data.broker_id = 2 
GROUP BY categories.id
ORDER BY total DESC;

SQLFiddle Demo

关于MySQL SUM left join 显示所有类别即使总和为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233270/

相关文章:

mysql - 从一个表中减去另一表的行

PostgreSQL 同表左外连接多表

mysql - 如何在node.js中使用mysql创建异步函数

mysql - 错误的sql SUM()正数负数

python - 加快Python求和速度

javascript - 如何让我的复选框值和选项值相加并将总和输入到我的文本区域?

SQL - 不满足左连接时的交叉连接

mysql - 哪个更快 : char(1) or tinyint(1) ? 为什么?

python mysql不正确的字符串值警告

MySQL 错误 1064 - 正确的语法?