分组和排序
提示:分组和排序是两个不同的概念,当让GROUP BY 和ORDER BY也是非常不同的,这一点需要牢记。 |
下面列出他们之间的不同:
ORDER BY | GROUP BY |
对筛选出的信息进行排序 | 对行进行分组,但输出可能不是分组的顺序 |
对任意列都可以使用 | 只可能使用选择列或者表达式,而且必须使用每个选择表达式 |
不一定需要 | 如果有聚集函数一起使用或表达式,则必须使用 |
注意:一般在使用GROUP BY语句时,应该也给出ORDER BY子句,这是保证数据正确排序的唯一方法,千万不要依赖GROUP BY进行排序。 |
1.1 未排序案例
下面我们来看一个例子:
SQL语句:
SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING COUNT(*) >= 3;
输出结果
![]() |
SQL语句分析:
可见,上面的语句先进行GROUP BY分组,然后再HAVING进行过滤,但过滤出来的结果没有进行排序。
1.2 排序案例
接下来我们再看一个进行排序的例子:
SQL语句:
SELECT order_num, COUNT(*) AS items FROM OrderItems GROUP BY order_num HAVING COUNT(*) >= 3
ORDER BY items, order_num;
输出结果:
![]() |
SQL语句分析:
在这个例子中,使用GROUP BY子句按订单号(order_num列)分组数据,以便COUNT(*)函数能够返回每个订单中的物品数目。HAVING子句 过滤数据,使得只返回包含三个或更多物品的订单。最后,用ORDER BY子句排序输出,可以看到输出的结果经行了增序排列。