SQL:group by -1对其他列的分组无效?

时间:2015-01-05 15:10:22

标签: sql oracle group-by

我有以下分组表达式

group by a, c, (case when a='F' then b else '-1' end) 

如果我不等于' F,我不想要分组,当我使用1代替-1时,查询结果有差异,我不会&#39 ;当我使用1时,看到差异,但我不知道,-1会改变查询结果还是有其他更可读的方法呢?

抱歉,我的查询中有一个拼写错误,真的查询不一样,在程序中我还没有得到它,现在一切都是正确的。

2 个答案:

答案 0 :(得分:0)

您的查询按 b 进行分组,因为您在b子句中列出了 GROUP BY 列:

GROUP BY a, b, c, CASE WHEN a='F' THEN b ELSE '-1' END
            ^

删除该列引用,并将其替换为CASE表达式,例如:

GROUP BY a, CASE WHEN a='F' THEN b ELSE '-1' END, c

答案 1 :(得分:0)

如果您在某些情况下只想group by b,请不要在b中加入group by。代替:

group by a, c, (case when a = 'F' then b end)

我会完全忽略else子句,但如果bNULL,这可能会让人感到困惑。如果您可以找到b永不占用的值,则可以在group by中添加该值。否则,您可以向逻辑中添加其他组件:

group by a, c,
         (case when a = 'F' then b end),
         (case when a = 'F' and b is null then 1 else 2 end)

当然,这会产生两个NULL行,一个用于真实NULL,一个用于非匹配。您可以在select

中处理这种区别