如何给重复的唯一数字?

问题描述 投票:0回答:2

我有这样的表格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

提前致谢

mysql sql database
2个回答
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

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, ...;

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

© www.soinside.com 2019 - 2024. All rights reserved.