Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 重复记录排名_Mysql - Fatal编程技术网

Mysql 重复记录排名

Mysql 重复记录排名,mysql,Mysql,我有一个MySQL表,它有两列id和uuid ++++++++++++++ + ID | UUID + ++++++++++++++ + 74 | 3210 + + 75 | 3210 + + 76 | 3210 + + 77 | 3310 + + 78 | 3310 + + 79 | 3410 + ++++++++++++++ 我需要输出如下使用mysql查询 +++++++++++++++ + ID | UUID + +++++++++++++++ + 74 | 3210

我有一个MySQL表,它有两列
id
uuid

++++++++++++++
+ ID | UUID  +
++++++++++++++
+ 74 | 3210  +
+ 75 | 3210  +
+ 76 | 3210  +
+ 77 | 3310  +
+ 78 | 3310  +
+ 79 | 3410  +
++++++++++++++
我需要输出如下使用mysql查询

+++++++++++++++
+ ID | UUID   +
+++++++++++++++
+ 74 | 3210   +
+ 75 | 3210-1 +
+ 76 | 3210-2 +
+ 77 | 3310   +
+ 78 | 3310-2 +
+ 79 | 3410   +
++++++++++++++
试试这个:

SELECT ID, 
       CONCAT(CAST(UUID AS CHAR(4)),
           IF(rn = 0, '', CONCAT('-', CAST(rn AS CHAR(4))))) AS UUID

FROM (
SELECT ID, UUID,
       @rn := IF(@id = UUID, @rn + 1,
                 IF(@id := UUID, 0, 0)) AS rn
FROM mytable
CROSS JOIN (SELECT @rn := 0, @id := 0) AS rn
ORDER BY UUID, ID) AS t

您也可以通过给出行号来完成

查询

select t1.ID, 
(case when t1.rn > 1 
then concat(cast(t1.UUID as char(4)), '-', (t1.rn - 1))
else t1.UUID end) as UUID
from 
(
    select ID, UUID,
    (
        case UUID when @curA 
        then @curRow := @curRow + 1 
        else @curRow := 1 and @curA := UUID end 
    ) as rn 
    from my_table t, 
    (select @curRow := 0, @curA := '') r 
    order by ID 
)t1;
结果

+----+--------+
| ID | UUID   |
+----+--------+
| 74 | 3210   |
| 75 | 3210-1 |
| 76 | 3210-2 |
| 77 | 3310   |
| 78 | 3310-1 |
| 79 | 3410   |
+----+--------+

谢谢您的回答!谢谢你的回答!
SELECT t1.ID, if(t1.rank=0, t1.uuid,concat(t1.uuid,"-",rank))
FROM 
  (
   SELECT ID, uuid,@rank := if(@uuid = uuid, @rank ,-1) + 1 rank, @uuid := uuid 
   FROM my_table,(SELECT @uuid :='', @rank :=0) vars 
   ORDER BY uuid 
  ) t1