group by内部排序
时间: 2023-09-25 08:09:26 浏览: 125
在 SQL 中,GROUP BY 子句用于将结果集中的行按照指定的列分组,然后对每个组应用聚合函数(如 COUNT、SUM、AVG 等)。GROUP BY 子句不会对分组后的结果进行排序,但是可以使用 ORDER BY 子句在分组的结果上进行排序。如果你需要在每个分组内部进行排序,可以使用子查询或窗口函数。
使用子查询进行分组内部排序的示例:
```sql
SELECT *
FROM (
SELECT name, age, score, ROW_NUMBER() OVER (PARTITION BY name ORDER BY score DESC) AS rank
FROM students
) AS ranked_students
WHERE rank <= 3
ORDER BY name, rank;
```
在这个示例中,我们首先使用子查询计算每个学生的得分排名(按照分数降序排列),然后使用 WHERE 子句过滤出排名前三名的学生,并使用 ORDER BY 子句按照姓名和排名进行排序。
使用窗口函数进行分组内部排序的示例:
```sql
SELECT name, age, score, ROW_NUMBER() OVER (PARTITION BY name ORDER BY score DESC) AS rank
FROM students
ORDER BY name, rank
```
在这个示例中,我们使用窗口函数 ROW_NUMBER() OVER (PARTITION BY name ORDER BY score DESC) 计算每个学生的得分排名,并按照姓名和排名进行排序。注意,窗口函数不会改变查询结果的分组方式,因此我们不需要在 GROUP BY 子句中指定 name 列。
阅读全文