如何在MySQL中识别重复值?实现employee_monitor表Rank标记查询
问题描述
现有数据表employee_monitor,结构及数据如下:
| Name | Code | ValueGain |
|---|---|---|
| Zakir | 10 | 15 |
| Zakir | 10 | 16 |
| Tame | 11 | 19 |
| Raya | 12 | 12 |
| Zakir | 10 | 20 |
| Tame | 11 | 28 |
需要编写MySQL查询语句,生成包含Rank字段的结果集:Rank=1表示对应Code的首次出现记录,Rank=0表示该Code的重复记录,目标结果如下:
| Name | Code | ValueGain | Rank |
|---|---|---|---|
| Zakir | 10 | 15 | 1 |
| Zakir | 10 | 16 | 0 |
| Tame | 11 | 19 | 1 |
| Raya | 12 | 12 | 1 |
| Zakir | 10 | 20 | 0 |
| Tame | 11 | 28 | 0 |
解决方案
使用窗口函数ROW_NUMBER()对每个Code分组内的记录排序,结合条件判断生成Rank值:
SELECT Name, Code, ValueGain, CASE WHEN ROW_NUMBER() OVER (PARTITION BY Code ORDER BY (SELECT 1)) = 1 THEN 1 ELSE 0 END AS `Rank` FROM employee_monitor;
说明
PARTITION BY Code:按Code字段分组,确保仅在相同Code的记录范围内计算行号ORDER BY (SELECT 1):保留原表的记录顺序,若需要按特定字段(如ValueGain)定义"首次出现"的顺序,可将(SELECT 1)替换为对应字段名CASE表达式:判断分组内的行号是否为1,是则标记为1,否则标记为0
内容的提问来源于stack exchange,提问作者Zakir Hossain
相关产品推荐
相关产品推荐

