有没有办法在 clickhouse 列中加入所有数组,然后过滤重复项?
Is there a way to join all arrays in clickhouse column and then filter for duplicates?
我有一个 clickhouse table,其中一列是 Array(T)。
当我 运行
SELECT array_field FROM my_table
我得到以下信息:
1 | {a, b, c}
--------------
2 | {a, b}
--------------
3 | {d, e}
我需要找到一种方法来获取所有列表中的唯一值列表,就像那样:
{a, b, c, d, e}
我该怎么做?
找到适合我的解决方案:
SELECT DISTINCT arrayJoin(array_field)
FROM my_table
要在一行中获得相同的数组:使用 groupUniqArray
和 -Array
组合器。检查 docs
SELECT *
FROM my_table
┌─array_field───┐
│ ['a','b','c'] │
│ ['a','b'] │
│ ['d','e'] │
└───────────────┘
3 rows in set. Elapsed: 0.001 sec.
SELECT DISTINCT arrayJoin(array_field)
FROM my_table
┌─arrayJoin(array_field)─┐
│ a │
│ b │
│ c │
│ d │
│ e │
└────────────────────────┘
SELECT groupUniqArrayArray(array_field)
FROM my_table
┌─groupUniqArrayArray(array_field)─┐
│ ['c','e','d','a','b'] │
└──────────────────────────────────┘
您的问题的另一种解决方案
SELECT arrayDistinct(arrayFlatten(groupArray(array_field)))
FROM my_table
我有一个 clickhouse table,其中一列是 Array(T)。
当我 运行
SELECT array_field FROM my_table
我得到以下信息:
1 | {a, b, c}
--------------
2 | {a, b}
--------------
3 | {d, e}
我需要找到一种方法来获取所有列表中的唯一值列表,就像那样:
{a, b, c, d, e}
我该怎么做?
找到适合我的解决方案:
SELECT DISTINCT arrayJoin(array_field)
FROM my_table
要在一行中获得相同的数组:使用 groupUniqArray
和 -Array
组合器。检查 docs
SELECT *
FROM my_table
┌─array_field───┐
│ ['a','b','c'] │
│ ['a','b'] │
│ ['d','e'] │
└───────────────┘
3 rows in set. Elapsed: 0.001 sec.
SELECT DISTINCT arrayJoin(array_field)
FROM my_table
┌─arrayJoin(array_field)─┐
│ a │
│ b │
│ c │
│ d │
│ e │
└────────────────────────┘
SELECT groupUniqArrayArray(array_field)
FROM my_table
┌─groupUniqArrayArray(array_field)─┐
│ ['c','e','d','a','b'] │
└──────────────────────────────────┘
您的问题的另一种解决方案
SELECT arrayDistinct(arrayFlatten(groupArray(array_field)))
FROM my_table