【发布时间】:2021-05-05 09:14:53
【问题描述】:
我有一张这样的桌子
| KEY | TAGS |
|---|---|
| 001 | A B C |
| 002 | D E |
| 003 | B C A |
VALUES 列包含标签列表,标签之间有空格。
我想找到所有具有重复值的键,而不是取决于它们的顺序。
在我的示例中,如何找到 KEY 001 和 003?
【问题讨论】:
我有一张这样的桌子
| KEY | TAGS |
|---|---|
| 001 | A B C |
| 002 | D E |
| 003 | B C A |
VALUES 列包含标签列表,标签之间有空格。
我想找到所有具有重复值的键,而不是取决于它们的顺序。
在我的示例中,如何找到 KEY 001 和 003?
【问题讨论】:
WITH input_datas (key, tags) AS (
VALUES
('001', 'A B C'),
('002', 'D E'),
('003', 'B C A')
),
key_tags AS (
SELECT
key, ELEMENT AS tag
FROM
input_datas
CROSS JOIN TABLE (SYSTOOLS.SPLIT(tags, ' ')) AS tags
),
ordered_tags AS (
SELECT
key, LISTAGG(DISTINCT tag, ' ') WITHIN GROUP (ORDER BY tag) tags
FROM key_tags
GROUP BY key
)
SELECT * FROM ordered_tags WHERE tags IN (SELECT tags FROM ordered_tags GROUP BY tags HAVING count(1) > 1)
【讨论】: