gpt4 book ai didi

mysql - 选择重复项,同时连接除第一个以外的每个

转载 作者:行者123 更新时间:2023-11-30 21:40:40 26 4
gpt4 key购买 nike

我正在尝试编写一个查询来选择我表中的所有数字,但是那些重复的数字我想在末尾附加一些内容以显示它是重复的。但是我不确定该怎么做。

这是表格的例子

TableA
ID Number
1 1
2 2
3 2
4 3
5 4

SELECT 语句的输出是这样的。

Number
1
2
2-dup
3
4

如有任何见解,我们将不胜感激。

最佳答案

如果你的mysql版本不支持窗口函数。你可以尝试写一个子查询来生成row_number 然后使用CASE WHEN 判断rn > 1 然后标记dup

create table T (ID int, Number int);


INSERT INTO T VALUES (1,1);
INSERT INTO T VALUES (2,2);
INSERT INTO T VALUES (3,2);
INSERT INTO T VALUES (4,3);
INSERT INTO T VALUES (5,4);

查询 1:

select t1.id,
(CASE WHEN rn > 1 then CONCAT(Number,'-dup') ELSE Number END) Number
from (
SELECT *,(SELECT COUNT(*)
FROM T tt
where tt.Number = t1.Number and tt.id <= t1.id
) rn
FROM T t1
)t1

Results :

| id | Number |
|----|--------|
| 1 | 1 |
| 2 | 2 |
| 3 | 2-dup |
| 4 | 3 |
| 5 | 4 |

如果您可以使用窗口函数,您可以将row_number窗口函数 结合使用,通过生成rownumber >编号

select t1.id,
(CASE WHEN rn > 1 then CONCAT(Number,'-dup') ELSE Number END) Number
from (
SELECT *,row_number() over(partition by Number order by id) rn
FROM T t1
)t1

sqlfiddle

关于mysql - 选择重复项,同时连接除第一个以外的每个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com