【发布时间】:2018-02-28 15:14:38
【问题描述】:
在写了几年 SQL 之后,我发现我经常把我感兴趣的列放在 SELECT 中,然后在 GROUP BY 中再次指定它们,这很烦人。我不禁想,我们为什么要这样做?
用户必须具体说明分组依据的原因是什么?我们不能让 SQL 引擎假设如果SELECT 中有聚合函数,则按其余非聚合列分组?
当您在SELECT 中有一个大的CASE WHEN 时,这将特别有用且更简洁。
【问题讨论】:
-
当您想要对比 SELECT 中表达的属性更多的属性进行分组时,您仍然需要 GROUP BY。例如,如果你想在 A 和 B 上对 R(A,B,C) 进行分组,然后只选择 B 和 SUM(C),或者类似的东西。
-
在花了几十年时间为各种风格的 SQL 编写编译器之后,我相当肯定那些编译器作者发现了一些有效的基本原因,可以在他们的每个程序中以几乎相同的方式做同样的事情.我不能说他们是对还是错,但我想很少有人能质疑他们的推理。另外,根据我的经验,允许假设(尤其是在代码中)有时会有点问题。
标签: sql ansi-sql sql-standards