我有一个select语句,它总是只返回3行。一列具有静态值RED AMBER和GREEN。
http://sqlfiddle.com/#!6/5e107/2
在小提琴链接中,我有一个示例代码。
select color,SUM(clrcount) from
tmp group by color
执行时返回3行。 但是,如果我删除标记为AMBER的项目,然后执行分组,则只返回两行。我总是要返回3行。 AMBER行可以计为0
答案 0 :(得分:4)
重新设计将是一种更好的方法,但如果您现在无法做到这一点并确定这三种颜色,请尝试以下方法:
<强> Fiddle demo 强>
select t.color,coalesce(sum(clrcount),0) colorCount
from tmp right join
(values('RED'),('AMBER'),('GREEN')) As t(color)
on tmp.color = t.color
group by t.color
答案 1 :(得分:1)
您需要为这些行设置clrcount = 0,而不是删除淡黄色行 - 这将适用于您当前的查询。
但是,如果必须删除它们,那么Joel Coehoorn的答案就是您的选择。
答案 2 :(得分:1)
要使用问题中的模式,您应该能够执行以下操作:
SELECT color, MAX(clrcount) AS clrcount
FROM (
SELECT color, COUNT(clrcount) AS clrcount
FROM tmp T
GROUP BY color
UNION ALL SELECT 'RED', 0
UNION ALL SELECT 'AMBER', 0
UNION ALL SELECT 'GREEN', 0
) A
GROUP BY color
使用UNION
确保您想要的行显示在结果中。
答案 3 :(得分:1)
select color,SUM(clrcount) from
(SELECT * from tmp
UNION ALL
SELECT 'RED',0
UNION ALL
SELECT 'AMBER',0
UNION ALL
SELECT 'GREEN',0)temp
group by color
答案 4 :(得分:0)
您需要一个单独的表来定义您可能的颜色。然后你加入它,就像这样:
select c.color, sum(clrcount)
from colors c
left join tmp t on t.color = c.color
group by c.color