sql - SELECT 列表中的所有列是否都必须出现在 GROUP BY 子句中

标签 sql select group-by aggregate-functions

我的讲师说:

All column names in SELECT list must appear in GROUP BY clause unless name is used only in an aggregate function.

我只是想对此进行一些确认,因为我想不出一个合乎逻辑的解释来解释为什么它应该是真的。

最佳答案

想象一下以下情况:

    A    B    C
   Cat   10   False
   Dog   25   True
   Dog   20   False
   Cat   5    False

如果您选择 A、B 并仅按 A 进行分组 - 您的输出会是什么?你只有两行(或元组),因为 A 有两个值 - 但它如何显示 B?

如果按 A、B 分组,您将得到四行,没有问题。 如果按 A 分组并对 B 执行函数 - 如 SUM(B),那么您会再次得到两行:

    Cat    15
    Dog    45

但是如果您选择 A、B 并且仅按 A 分组 - 它不知道该怎么做。说实话,我相信有些数据库会在这种情况下为 B 选择一个随机值,并且我相信有些数据库会给您一条错误消息。

关于sql - SELECT 列表中的所有列是否都必须出现在 GROUP BY 子句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986127/

相关文章:

python - 使用 groupby 获取组中具有最大值的行

sql - 在 SQL Server 中查询对话中用户的精确匹配

python - 如何更快地从azure documentdb获取数据

javascript - 如果我选择了 true 值,则通过 jQuery 分配给其他选择选项

MySQL INSERT INTO ... SELECT 抛出错误 1064

python - 零值的 Pandas groupby

java - 如何通过java代码执行Oracle sql脚本

sql - 什么是 'naked where clause'

database - PostgreSQL 将列名更改为另一个表列

mysql - 按文本字段分组时的 GROUP_CONCAT() 行数