![]() |
1
25
很难确切地知道SQL语言的设计者在编写标准时是怎么想的, 但我的意见是 . “猜猜你的意思” ,并自动填空。 . 在编写查询时,最重要的考虑是 产生正确的结果 . 在语言语法中引入模糊性并不能使之更好 . 快捷方式 造成了问题。以自然联接为例,您可以省略要联接的列的名称,并允许数据库根据列名推断它们。一旦列名发生变化(随着时间的推移,它们自然会发生变化) -现有查询的语义也随之改变 . 这很糟糕。。。非常糟糕 -你真的不想这样吗 魔术 发生在数据库代码的幕后。 然而,这种设计选择的一个结果是,SQL是一种冗长的语言,您必须在其中显式地表达您的意图。 |
![]() |
2
2
我能想到的唯一合乎逻辑的理由就是
即使column3在查询的其他地方没有表示,您仍然可以按它的值对结果进行分组(当然,一旦您这样做了,您就无法从结果中判断为什么要按原来的方式对记录进行分组。) 对于大多数最常见的场景(按每个非聚合列分组)来说,这似乎是一个简单而有效的加速编码的工具。
也许
因为在SQL工具中,允许按结果列号(即。
|
![]() |
3
0
很简单,就像这样:您要求sql按from子句中的每一列对结果进行分组,这意味着对于from子句sql中的每一列,sql引擎都会在内部对结果集进行分组,然后再将其呈现给您。所以这就解释了为什么它要求你提到from too中的所有列,因为它不可能将它部分地分组。如果您提到GROUPBY子句,那么只有通过对所有列进行分组,sql才能达到您的目的。这是一个数学限制。 |
![]() |
John Smith · Java按值对映射进行分组,其中值为列表 2 年前 |
![]() |
The Great · 拆分并存储数据帧,但名称基于特定列中的唯一值 2 年前 |
![]() |
Flo · 分组依据中的SQL大小写 2 年前 |
![]() |
user13663655 · 我可以使用条件分组并返回源类型值吗 2 年前 |
![]() |
pinkiBet · 使用MAX和UNION分组,还是加入? 2 年前 |
![]() |
lugger1 · 如何获取Postgres中时间间隔的平均值 6 年前 |