我正在使用以下查询,它完美运行:
SELECT periodOfDay, COUNT(*),
SUM(CASE WHEN range_1 < 36 AND range_2 < 18 THEN 1 ELSE 0 END),
SUM(CASE WHEN range_1 > 36 AND range_1 < 100 AND range_2 > 18 AND range_2 < 100 THEN 1 ELSE 0 END),
SUM(CASE WHEN range_1 > 100 AND range_2 > 100 THEN 1 ELSE 0 END)
FROM tb_journal
GROUP BY periodOfDay;
periodOfDay可以具有值0, 1, 2
但是在数据库中可能没有记录与periodOfDay的可能情况之一没有对应。
无论如何,我想在0参数的最终结果中写下它。
没有代理java方面有可能吗?
谢谢!
修改
此问题的第一部分是here
答案 0 :(得分:1)
使用LEFT JOIN
:
SELECT p.periodOfDay, COUNT(j.periodOfDay),
SUM(CASE WHEN j.range_1 < 36 AND j.range_2 < 18 THEN 1 ELSE 0 END),
SUM(CASE WHEN j.range_1 > 36 AND j.range_1 < 100 AND range_2 > 18 AND range_2 < 100 THEN 1 ELSE 0 END),
SUM(CASE WHEN j.range_1 > 100 AND j.range_2 > 100 THEN 1 ELSE 0 END)
FROM (SELECT 1 as periodOfDay UNION ALL
SELECT 2 as periodOfDay UNION ALL
SELECT 3 as periodOfDay
) p LEFT JOIN
tb_journal j
ON p.periodOfDay = j.periodOfDay
GROUP BY p.periodOfDay;
请注意,所有列名都是合格的(即具有表别名)。当查询有多个表引用时,这是一个非常好的习惯。