GROUP BY 与 ORDER BY区别
本文解释了 GROUP BY 和 ORDER BY 语句的区别。它们主要用于组织 SQL 查询获得的数据。这些子句之间的区别是学习SQL时最容易卡住的地方之一。它们之间的主要区别在于GROUP BY 子句适用于我们想要对多于一组行使用聚合函数时。ORDER BY 子句适用于我们要按排序顺序获取查询得到的数据时。在进行比较之前,我们首先要了解这些 SQL 子句。
一、ORDER BY 语句
ORDER BY 子句在SQL 查询中用于按升序或降序对查询返回的数据进行排序。如果我们省略排序顺序,则默认按升序对汇总结果进行排序。ORDER BY 子句与 GROUP BY 子句一样,可以与 SELECT 语句一起使用。ASC表示升序,而DESC表示降序。
Order By语法
SELECT expressions
FROM tables
[WHERE conditions]
ORDER BY expression [ ASC | DESC ];
让我们借助以下示例了解 ORDER BY 子句的工作原理。假设我们有一个包含以下数据的开发人员表:
我们可以看到这些结果并没有以有序的方式显示。假设我们要根据state 列按升序或降序顺序结果。在这种情况下,我们需要 ORDER BY 命令来获得所需的结果。我们可以通过执行如下命令来做到这一点:
mysql> SELECT D_name, D_state, D_salary
FROM developers
ORDER BY D_state ASC;
这是我们将获得所需结果的输出:
二、Group By 语句
GROUP BY 子句在SQL 查询中用于组织具有相同属性值的数据。通常,我们将它与SELECT 语句一起使用。永远要记住,我们必须将 GROUP BY 子句放在WHERE 子句之后。此外,它位于 ORDER BY 子句之前。
我们经常可以将此子句与 SUM、AVG、MIN、MAX 和 COUNT 等聚合函数配合使用,以从数据库中生成汇总报告。请务必记住,此子句中的属性必须出现在 SELECT 子句中,而不是聚合函数下。如果我们这样做,查询将不正确。因此,GROUP BY 子句总是与 SELECT 子句一起使用。GROUP BY 子句的查询是分组查询,它为每个分组对象返回一行。
Group By语法
SELECT column_name, function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name;
让我们通过示例了解 GROUP BY 子句的工作原理。在这里,我们将使用同一张表进行演示。
假设我们想知道开发人员在特定状态下的平均工资,并根据状态列按降序排列结果。在这种情况下,我们将需要 GROUP BY 和 ORDER BY 命令来获得所需的结果。我们可以通过执行如下命令来做到这一点:
mysql> SELECT D_state, avg(D_salary) AS salary
FROM developers
GROUP BY D_state
ORDER BY D_state DESC;
这个查询最初形成了一个对状态进行分组的中间结果。接下来,对每组状态进行AVG函数,然后对结果进行降序排序,最终得到我们想要的结果,如下图:
三、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 By | Order By |
---|---|
Group By用于对具有相同值的行进行分组。 | Order By按升序或降序对结果集进行排序。 |
Group By可能在 CREATE VIEW 语句中被允许。 | 在 CREATE VIEW 语句中是不允许的 |
Group By控制行的显示。 | Order By控制列的显示。 |
该属性不能在 GROUP BY 语句下的聚合函数下。 | 该属性可以在 ORDER BY 语句下的聚合函数下。 |
Group By总是在 SELECT 语句中的 ORDER BY 子句之前使用。 | Order By总是在 SELECT 语句中的 GROUP BY 子句之后使用。 |
必须在 GROUP BY 中使用聚合函数。 | 在 ORDER BY 中使用聚合函数不是强制性的。 |
在这里,分组是基于行的属性值之间的相似性进行的。 | 在这里,结果集根据列的属性值进行排序,升序或降序。 |
五、结论
本文比较了 GROUP BY 和 ORDER BY 语句。这两个语句都是非常有用的 SQL 数据库功能。当我们想要形成一组行时,我们使用 GROUP BY 语句。如果我们想根据特定列按升序或降序组织数据,我们使用 ORDER BY 语句。它们没有任何关系,因为两者都用于两个不同的目的。但是,我们可以将它们组合起来用于某些特殊目的,也可以根据情况单独使用它们。我们只能在 SELECT 语句中使用这些语句。
热门文章
优秀文章