我希望根据一组数据的得分总和来选择所有类别,即使该数据集不包含类别。但是,无论我尝试什么,它总是只显示具有实际数据的类别。
我创建了以下 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;
关于MySQL SUM left join 显示所有类别即使总和为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233270/