如何给重复的唯一数字?

时间:2017-12-27 14:28:28

标签: mysql sql database

我有像这样的表格ID

52
52
53
54
54
54
55

我需要找到重复的并像这样更新它们

52   1
52   2
53   1
54   1
54   2
54   3
55   1

此查询

SELECT klient_id,
  (
    SELECT COUNT(klient_id)
    FROM vClient_priklucok
    WHERE klient_id = data.klient_id
  ) AS count
FROM vClient_priklucok AS data

返回这样的数据

52   2
52   2
53   1
54   3
54   3
54   3
55   1

提前致谢

2 个答案:

答案 0 :(得分:1)

SELECT id,         
       @rownum := case when @prevId <> id then 1 else @rownum + 1 end as rownumber,
       @prevId := id
FROM your_table
CROSS JOIN (SELECT @rownum := 0, @prevId := 0) r
ORDER BY id ASC

答案 1 :(得分:0)

在MySQL中,您可以使用变量执行此操作。但是,你需要非常小心。变量只能在一个表达式中引用。

此外,最新版本的MySQL需要一个子查询来在使用变量时对数据进行排序。所以,我建议:

select t.id,
       (@rn := if(@i = id, @rn + 1,
                  if(@i := id, 1, 1)
                 )
       ) as counter
from (select t.*
      from t
      order by t.id
     ) t cross join
     (select @rn := 0, @i := -1) params;

正如documentation所解释的那样:

  

在下面的语句中,您可能会认为MySQL会进行评估   首先是@a,然后是第二个任务:

SELECT @a, @a:=@a+1, ...;
     

但是,涉及用户的表达式的评估顺序   变量未定义。