ORDER BY && GROUP BY

简介: ORDER BY && GROUP BY

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。

GROUP BY 语句

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

SQL GROUP BY 语法

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

SQL GROUP BY 实例

我们拥有下面这个 "Orders" 表:

image.png

现在,我们希望查找每个客户的总金额(总订单)。

我们想要使用 GROUP BY 语句对客户进行组合。

我们使用下列 SQL 语句:

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

结果集类似这样:

image.png

很棒吧,对不对?

让我们看一下如果省略 GROUP BY 会出现什么情况:

SELECT Customer,SUM(OrderPrice) FROM Orders

结果集类似这样:

image.png

上面的结果集不是我们需要的。

那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer" 返回 6 个值(每个值对应 "Orders" 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。

GROUP BY 一个以上的列

我们也可以对一个以上的列应用 GROUP BY 语句,就像这样:

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate

ORDER BY 语句用于对结果集进行排序。

ORDER BY 语句

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照升序对记录进行排序。

如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

原始的表 (用在例子中的):

Orders 表:

image.png

实例 1

以字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders 
ORDER BY Company

结果:

image.png

实例 2

以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):

1. SELECT Company, OrderNumber FROM Orders 
2.ORDER BY Company, OrderNumber

结果:

image.png

实例 3

以逆字母顺序显示公司名称:

SELECT Company, OrderNumber FROM Orders 
ORDER BY Company DESC

结果:

image.png

实例 4

以逆字母顺序显示公司名称,并以数字顺序显示顺序号:

 SELECT Company, OrderNumber FROM Orders 
 ORDER BY Company DESC, OrderNumber ASC

结果:

image.png

注意:在以上的结果中有两个相等的公司名称 (W3School)。只有这一次,在第一列中有相同的值时,第二列是以升序排列的。如果第一列中有些值为 nulls 时,情况也是这样的。

目录
相关文章
|
开发框架 .NET 编译器
C#-Group By 的使用
group by 是linq中的分组功能,能通过给定的字段对数据集进行分组,得到分组后的结果。
290 0
|
SQL 关系型数据库 MySQL
mysql使用ORDER BY和GROUP BY
mysql使用ORDER BY和GROUP BY
60 0
|
SQL 关系型数据库 MySQL
GROUP BY和ORDER BY的区别
GROUP BY和ORDER BY的区别
301 0
|
SQL 关系型数据库 MySQL
only_full_group_by问题而引发的对group by的深入思考
only_full_group_by问题而引发的对group by的深入思考
160 0
group by+group_concat解决的小问题
group by+group_concat解决的小问题
112 0
group by
group by
93 0
|
SQL 关系型数据库 数据挖掘
你真的懂使用Group by?
你真的懂使用Group by?
555 0
你真的懂使用Group by?
|
SQL 关系型数据库 MySQL
order by使用
order by使用
165 0
order by使用
|
SQL
十、GROUP BY 和 HAVING 的使用
十、GROUP BY 和 HAVING 的使用
292 0
|
MySQL 关系型数据库
mysql 5.7 中order by 和GROUP BY 一起使用 order by 不生效
在mysql5.7中,如果不加limit,系统会把order by优化掉。https://dev.mysql.com/doc/refman/5.7/en/semi-joins.html select from (select from zz.
4480 0