[英]MYSQL - Update row number for each group
I am trying to update the column sip_count so that it counts the number of rows with the same sip_id as shown below.我正在尝试更新 sip_count 列,以便它计算具有相同 sip_id 的行数,如下所示。 None of the things that I have tried are worth posting.我尝试过的所有东西都不值得发布。 How do I do this?我该怎么做呢?
Table桌子
sip_id | sip | sip_count
---------------------------
1 | 1 | 2
1 | 1 | 2
2 | 1 | 3
2 | 1 | 3
2 | 1 | 3
4 | 1 | 2
4 | 1 | 2
3 | 1 | 3
3 | 1 | 3
3 | 1 | 3
Desired result想要的结果
sip_id | sip | sip_count
---------------------------
1 | 1 | 1
1 | 1 | 2
2 | 1 | 1
2 | 1 | 2
2 | 1 | 3
4 | 1 | 1
4 | 1 | 2
3 | 1 | 1
3 | 1 | 2
3 | 1 | 3
UPDATE更新
Try to use variable:尝试使用变量:
SET @i:=0;
UPDATE
table_name
INNER JOIN
(
SELECT
table_name.primary_key,
table_name.sip_id,
@i:=IF(@i > b.count, 1, @i+1) AS count
FROM table_name
INNER JOIN
(
SELECT
sip_id,
COUNT(sip_count) AS count
FROM table_name GROUP BY sip_id
) b
ON table_name.sip_id = b.sip_id
) c
ON table_name.primary_key = c.primary_key
SET sip_count=c.count
With mysql 8 you can use window function使用 mysql 8,您可以使用窗口函数
SELECT
`sip_id`, `sip`,
ROW_NUMBER() OVER(PARTITION BY `sip_id`) AS 'sip_count'
FROM sip_count
CREATE TABLE sip_count ( `sip_id` INTEGER, `sip` INTEGER, `sip_count` INTEGER ); INSERT INTO sip_count (`sip_id`, `sip`, `sip_count`) VALUES ('1', '1', '2'), ('1', '1', '2'), ('2', '1', '3'), ('2', '1', '3'), ('2', '1', '3'), ('4', '1', '2'), ('4', '1', '2'), ('3', '1', '3'), ('3', '1', '3'), ('3', '1', '3');
\n✓ ✓\n\n✓ ✓\n
SELECT `sip_id`, `sip`, ROW_NUMBER() OVER(PARTITION BY `sip_id`) AS 'sip_count' FROM sip_count
\nsip_id | sip_id | sip |啜饮| sip_count sip_count\n-----: | -----: | --: | --: | --------: --------:\n 1 | 1 | 1 | 1 | 1 1\n 1 | 1 | 1 | 1 | 2 2\n 2 | 2 | 1 | 1 | 1 1\n 2 | 2 | 1 | 1 | 2 2\n 2 | 2 | 1 | 1 | 3 3\n 3 | 3 | 1 | 1 | 1 1\n 3 | 3 | 1 | 1 | 2 2\n 3 | 3 | 1 | 1 | 3 3\n 4 | 4 | 1 | 1 | 1 1\n 4 | 4 | 1 | 1 | 2 2\n
I tried the below query and it gave me the result you are looking for.我尝试了下面的查询,它给了我你正在寻找的结果。
UPDATE SipDetails
SET sip_count = (SELECT (MAX(sp2.sip_count) + 1)
FROM SipDetails sp2
WHERE sp2.sip_id = SipDetails.sip_id);
Please note: [SipDetails] should be replaced with your relevant table name.请注意:[SipDetails] 应替换为您的相关表名。
Below mentioned is the result of running the above query.下面提到的是运行上述查询的结果。 I initially set the "sip_count" column value to 0 (zero), before the update.在更新之前,我最初将“sip_count”列值设置为 0(零)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.