gpt4 book ai didi

sql - SQL 中的 GROUP BY 子句是多余的吗?

转载 作者:行者123 更新时间:2023-12-04 00:57:21 25 4
gpt4 key购买 nike

每当我们在 SQL 中使用聚合函数( MINMAXAVG 等)时,我们必须始终 GROUP BY所有非聚合列,例如:

SELECT storeid, storename, SUM(revenue), COUNT(*)
FROM Sales
GROUP BY storeid, storename

当我们在 SELECT 语句中使用函数或其他计算时,它变得更加具有侵入性,因为这也必须复制到 GROUP BY 子句中。
SELECT (2 * (x + y)) / z + 1, MyFunction(x, y), SUM(z)
FROM AnotherTable
GROUP BY (2 * (x + y)) / z + 1, MyFunction(x, y)

如果我们更改了 SELECT 语句,我们必须记住对 GROUP BY 子句进行相同的更改。

那么 GROUP BY 子句是多余的吗?
  • 如果确实如此,那么为什么 SQL 中有一个 GROUP BY 子句呢?
  • 如果不是这样,那么 GROUP BY 给我们提供了什么额外的功能?
  • 最佳答案

    Whenever we use an aggregate function in SQL (MIN, MAX, AVG etc), we must always GROUP BY all non-aggregated columns



    这在一般情况下是不正确的。例如 MySQL 不需要这个,SQL 标准也没有说这个。
  • Debunking GROUP BY myths

  • It becomes even more intrusive when we use a function or other calculation in our SELECT statement, as this must also be copied to the GROUP BY clause.



    也不是一般的。 MySQL(也许还有其他数据库)允许在 GROUP BY 子句中使用列别名:
    SELECT (2 * (x + y)) / z + 1 AS a, MyFunction(x, y) AS b, SUM(z)
    FROM AnotherTable
    GROUP BY a, b

    If this is not the case, then what extra functionality does GROUP BY give us?



    指定分组依据的唯一方法是使用 GROUP BY 子句。您不一定能从 SELECT 中提到的列中推断出它。事实上,您甚至不必选择 GROUP BY 中提到的所有列:
    SELECT MAX(col2)
    FROM foo
    GROUP BY col1
    HAVING COUNT(*) = 2

    关于sql - SQL 中的 GROUP BY 子句是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505406/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com