排名函数(rank()) over ( PARTITION BY) 用于对数据集进行分组,然后在每个分组内进行排序,并为每个排序位置分配一个排名值。而取第一条则是指在每个分组中只选择排名值为1的记录。

例如,假设有以下数据集:

| ID | Name | Score | |--------|---------|-------| | 1 | Tom | 80 | | 2 | John | 90 | | 3 | Mary | 85 | | 4 | John | 95 | | 5 | Tom | 75 | | 6 | Mary | 88 |

如果使用排名函数(rank()) over ( PARTITION BY Name ORDER BY Score DESC),则会按照Name进行分组,并按照Score降序排序,得到如下结果:

| ID | Name | Score | Rank | |--------|---------|-------|------| | 2 | John | 95 | 1 | | 4 | John | 90 | 2 | | 6 | Mary | 88 | 1 | | 3 | Mary | 85 | 2 | | 1 | Tom | 80 | 1 | | 5 | Tom | 75 | 2 |

如果只取每个分组中的第一条记录,则可以在外层查询中使用WHERE条件筛选Rank为1的记录,即可得到每个分组中的第一条记录。

示例查询语句:

SELECT * FROM ( SELECT ID, Name, Score, RANK() OVER (PARTITION BY Name ORDER BY Score DESC) AS Rank FROM YourTable ) AS subquery WHERE Rank = 1;

执行上述查询后,结果将为:

| ID | Name | Score | Rank | |--------|---------|-------|------| | 2 | John | 95 | 1 | | 6 | Mary | 88 | 1 | | 1 | Tom | 80 | 1 |

这样就得到了每个分组中的第一条记录

rank over PARTITION BY取第一条

原文地址: https://www.cveoy.top/t/topic/idAb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录