如何合并列中的多行,同时对列中的值进行重复数据删除?

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

如何获得下面指定的结果?

我尝试使用

LISTAGG
函数,但它不能消除重复项。

有没有办法消除数据库本身的重复项,而不是将值提取到服务中然后进行重复数据删除?

数据集:

col0   col1
1      7
1      8
1      8
1      2
1      9
2      9
3      10
3      11
3      12

想要的结果:

col0   col1
1      2,7,8,9
2      9
3      10,11,12

尝试的 SQL(未消除重复项):

SELECT 
  col0, 
  SUM(col2 + col3) AS mycount
  LISTAGG(col1, ',') within GROUP (ORDER BY col1) 
FROM mytable 
WHERE 
  _time >= TIMESTAMP '2024-12-03 00:00:00' AND
  _time <  TIMESTAMP '2024-12-03 01:00:00'
GROUP BY col0
ORDER BY mycount DESC
LIMIT 10
;
sql oracle-database string-concatenation apache-superset listagg
1个回答
0
投票

您需要在

DISTINCT
 内使用 
LISTAGG

小提琴

SELECT col0,
       LISTAGG(DISTINCT col1, ',') WITHIN GROUP (ORDER BY col1) AS col1
FROM test
GROUP BY col0;

输出

enter image description here

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