SQL:按-1 分组对按其他列分组没有任何作用?

SQL: group by -1 is doing nothing with grouping by other columns?

我有以下按表达式分组的部分

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

如果 a 不等于 'F',我不希望按 b 分组,当我使用 1 而不是 -1 时,查询结果存在差异,我在使用时没有看到差异1,但我不知道,-1 会改变查询结果还是有其他更易读的方式?

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

您的查询按 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

如果您只想在某些条件下 group by b,则不要在 group by 中包含 b。相反:

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.

中处理该区别