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
子句,但如果 b
是 NULL
,这可能会造成混淆。如果您能找到 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
.
中处理该区别
我有以下按表达式分组的部分
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
子句,但如果 b
是 NULL
,这可能会造成混淆。如果您能找到 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
.