SQL中如何针对Class为2的行按No列执行Rank()排名
如何在SQL中基于列条件对指定行使用Rank()函数?
需求:仅对数据表中Class列值为2的行,根据No列的值进行排名;非Class=2的行,Rank字段留空。
原始数据表
| No | Name | Class |
|---|---|---|
| 101 | reema | 2 |
| 102 | kriya | 1 |
| 103 | meena | 3 |
| 104 | carlin | 1 |
| 105 | dhiren | 2 |
| 106 | hiren | 2 |
| 107 | mahir | 3 |
| 108 | nishi | 1 |
期望结果表
| No | Name | Class | Rank |
|---|---|---|---|
| 101 | reema | 2 | 1 |
| 102 | kriya | 1 | |
| 103 | meena | 3 | |
| 104 | carlin | 1 | |
| 105 | dhiren | 2 | 2 |
| 106 | hiren | 2 | 3 |
| 107 | mahir | 3 | |
| 108 | nishi | 1 |
解决方案
可以通过CASE语句结合窗口函数RANK()实现需求,SQL语句如下:
SELECT No, Name, Class, CASE WHEN Class = 2 THEN RANK() OVER (PARTITION BY Class ORDER BY No) ELSE NULL END AS Rank FROM your_table_name;
逻辑说明
RANK() OVER (PARTITION BY Class ORDER BY No)会按Class分组,在每组内对行按No升序计算排名;CASE语句判断当前行Class是否为2:- 符合条件时返回计算出的排名;
- 不符合条件时返回
NULL,对应结果中的空值。
内容的提问来源于stack exchange,提问作者n179911a
相关产品推荐
相关产品推荐

