GROUP BY 与 ORDER BY

17 Mar 2025 | 5 分钟阅读

本文详细解释了 GROUP BY 和 ORDER BY 子句的完整概述。它们主要用于组织通过 SQL 查询获得的数据。这些子句之间的差异是学习 SQL 时最常见的卡壳点之一。它们之间的主要区别在于,GROUP BY 子句适用于我们希望对多组行使用聚合函数时。ORDER BY 子句适用于我们希望以排序顺序获取查询获得的数据时。在进行比较之前,我们首先了解这些 SQL 子句。

GROUP BY vs. ORDER BY

ORDER BY 子句

ORDER BY 子句 在 SQL 查询中用于将查询返回的数据按升序或降序排序。如果省略排序顺序,它默认按升序对汇总结果进行排序。ORDER BY 子句,与 GROUP BY 子句一样,可以与 SELECT 语句结合使用。ASC 表示升序,而 DESC 表示降序。

以下是在 SQL 语句中使用 ORDER BY 子句的语法

让我们通过以下示例了解 ORDER BY 子句的工作原理。假设我们有一个表 developer,其中包含以下数据

GROUP BY vs. ORDER BY

我们可以看到这些结果没有以有组织的方式显示。假设我们希望根据 state 列 按升序或降序组织结果。在这种情况下,我们需要 ORDER BY 命令才能获得所需的结果。我们可以通过执行以下命令来完成此操作

这是我们将获得所需结果的输出

GROUP BY vs. ORDER BY

GROUP BY 子句

GROUP BY 子句 在 SQL 查询中用于组织具有相同属性值的数据。通常,我们将其与 SELECT 语句 一起使用。始终要记住,我们必须将 GROUP BY 子句放在 WHERE 子句 之后。此外,它位于 ORDER BY 子句之前。

我们经常可以将此子句与聚合函数(如 SUM、AVG、MIN、MAX 和 COUNT)结合使用,以从数据库生成汇总报告。重要的是要记住,此子句中的属性必须出现在 SELECT 子句中,而不是在聚合函数下。如果我们这样做,查询将不正确。因此,GROUP BY 子句总是与 SELECT 子句结合使用。GROUP BY 子句的查询是分组查询,它为每个分组对象返回一行。

以下是在 SQL 语句中使用 GROUP BY 子句的语法

让我们通过一个示例了解 GROUP BY 子句的工作原理。这里我们将用同一个表进行演示。

假设我们想知道特定州开发人员的平均工资,并根据 state 列按降序组织结果。在这种情况下,我们需要 GROUP BY 和 ORDER BY 命令才能获得所需的结果。我们可以通过执行以下命令来完成此操作

此查询最初形成了一个已对状态进行分组的中间结果。接下来,对每个状态组执行 AVG 函数,然后按降序对结果进行排序,最后我们将获得如下所示的所需结果

GROUP BY vs. ORDER BY

GROUP BY 和 ORDER BY 的主要区别

以下是 Group By 和 Order By 子句之间的主要区别

  • Group By 子句用于根据特定列中的相同值对数据进行分组。另一方面,ORDER BY 子句对结果进行排序并以升序或降序显示。
  • 使用 Group By 必须使用聚合函数。另一方面,使用 Order By 不强制使用聚合函数。
  • 属性不能在 GROUP BY 语句下的聚合函数下,而属性可以在 ORDER BY 语句下的聚合函数下。
  • Group By 子句控制元组的呈现方式,这意味着分组是基于行属性值之间的相似性进行的。相比之下,ORDER BY 子句控制列的呈现方式,这意味着排序是基于列的属性值按升序或降序进行的。
  • GROUP BY 总是放在 WHERE 子句之后,ORDER BY 语句之前。另一方面,ORDER BY 总是用在 GROUP BY 语句之后。

GROUP BY 与 ORDER BY 比较表

以下比较图快速解释了它们的主要区别

序号GROUP BYORDER BY
1.它用于对具有相同值的行进行分组。它对结果集进行排序,按升序或降序。
2.它可能允许在 CREATE VIEW 语句中使用。它不允许在 CREATE VIEW 语句中使用。
3.它控制行的呈现方式。它控制列的呈现方式。
4.属性不能在 GROUP BY 语句下的聚合函数下。属性可以在 ORDER BY 语句下的聚合函数下。
5.它在 SELECT 语句中始终在 ORDER BY 子句之前使用。它在 SELECT 语句中始终在 GROUP BY 子句之后使用。
6.在 GROUP BY 中强制使用聚合函数。在 ORDER BY 中不强制使用聚合函数。
7.这里,分组是基于行属性值之间的相似性进行的。这里,结果集是基于列的属性值按升序或降序排序的。

结论

本文对 GROUP BY 和 ORDER BY 子句进行了比较。这两个子句都是非常有用的 SQL 数据库功能。当我们希望形成一组行时,我们使用 GROUP BY 子句。如果我们要根据特定列按升序或降序组织数据,我们使用 ORDER BY 子句。它们之间没有任何关系,因为它们都用于两个不同的目的。但是,我们可以将它们组合起来以实现某些特殊目的,或者根据情况单独使用它们。我们只能将这些子句与 SELECT 语句一起使用。


下一个主题WHERE 与 HAVING