我有像这样的表格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
提前致谢
答案 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, ...;
但是,涉及用户的表达式的评估顺序 变量未定义。