简体   繁体   English

MYSQL - 更新每个组的行号

[英]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

db<>fiddle here db<> 在这里摆弄

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM