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 语句中使用这些语句。

热门文章

优秀文章