我有一个包含这样数据的表:
colA | animals
1 | horse, mouse
2 | dog,cat,dog
3 | cat, rat
4 | rat, rat, bug
我希望输出如下所示,我想遍历每一行,只获取唯一值。
colA | animals
1 | horse, mouse
2 | dog,cat
3 | cat, rat
4 | rat, bug
我知道distinct
是列中的所有不同值,但不知道如何为每行执行此操作。有没有可以做到的命令?
答案 0 :(得分:1)
以下是BigQuery Standard SQL
#standardSQL
SELECT
colA,
(
SELECT STRING_AGG(DISTINCT TRIM(animal), ',')
FROM UNNEST(SPLIT(animals)) animal
) animals
FROM `project.dataset.table`
-- ORDER BY colA
您可以使用问题中的虚拟数据来测试/播放上面的内容:
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 colA, 'horse, mouse' animals UNION ALL
SELECT 2, 'dog,cat,dog' UNION ALL
SELECT 3, 'cat, rat' UNION ALL
SELECT 4, 'rat, rat, bug'
)
SELECT
colA,
(
SELECT STRING_AGG(DISTINCT TRIM(animal), ',')
FROM UNNEST(SPLIT(animals)) animal
) animals
FROM `project.dataset.table`
-- ORDER BY colA
输出如下
colA animals
1 horse,mouse
2 dog,cat
3 cat,rat
4 rat,bug
如果输出中不需要colA,则不要将其包含在SELECT
中#standardSQL
SELECT
(
SELECT STRING_AGG(DISTINCT TRIM(animal), ',')
FROM UNNEST(SPLIT(animals)) animal
) animals
FROM `project.dataset.table`
同样在不需要colA的情况下 - 以下版本也可以使用
#standardSQL
SELECT
STRING_AGG(DISTINCT TRIM(animal), ',') distinct_animals
FROM `project.dataset.table`, UNNEST(SPLIT(animals)) animal
GROUP BY animals