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

2024-01-08

我的讲师说:

SELECT 列表中的所有列名必须出现在 GROUP BY 子句中,除非名称仅在聚合函数中使用。

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


想象一下以下情况:

    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 选择一个随机值,并且我相信有些数据库会给您一条错误消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SELECT 列表中的所有列是否都必须出现在 GROUP BY 子句中 的相关文章

随机推荐