在 Clickhouse 上使用类似 group_concat 的东西
using something like group_concat on clickhouse
我正在尝试获取
的结果
types
name
fruit
banana, apple, guaba, strawberry
来自 table 数据库,如
table: 水果
types
name
fruit
banana
fruit
apple
fruit
guaba
fruit
strawberry
我知道 MySQL 我可以使用 group_concat 通过使用
得到我想要的结果
SELECT group_concat(name), types FROM fruits
我做了研究,人们建议我在 clickhouse 中使用 groupArray 以获得类似的结果,但这不是我想要的。因为当我使用
SELECT groupArray(name), types FROM fruits GROUP BY types
它给了我
的结果
types
name
fruit
apple, banana, banana, strawberry,strawberry,strawberry, guaba,guaba,guaba,guaba
groupArray 的顺序混乱,我似乎找不到解决顺序的答案:(
在 clickhouse 中有什么方法可以让我们按顺序获得结果数组?为什么会有重复的结果?
我不能使用 groupUniqArray,因为有时我的结果应该是
banana, apple, guaba, strawberry, strawberry(如果草莓在 DB 中有两次)
如何保留重复的数据而不按顺序相乘???
- 我有 input_time 的数据和密钥,所以我的 table 类似于
types
name
input_time
key
fruit
banana
01:01
01
fruit
apple
01:02
01
fruit
guaba
01:03
02
fruit
strawberry
01:04
03
fruit
strawberry
01:05
04
忘记了 'types',我想在数据库保存顺序(input_time 顺序)中按键获取分组名称的结果。我应该如何更改我的查询?
我试过了
SELECT groupArray(name), key FROM fruits GROUP BY key ORDER BY input_time
但它没有给我想要的结果..
在子查询中使用 order by。数组中的顺序与查询管道前一阶段行的顺序相同
select types, arrayCompact(groupArray(name)) names, length(names) len from(
select types, name from fruit order by types, input_time)
group by types
┌─types─┬─names───────────────────────────────────┬─len─┐
│ fruit │ ['banana','apple','guaba','strawberry'] │ 4 │
└───────┴─────────────────────────────────────────┴─────┘
https://clickhouse.com/docs/en/sql-reference/functions/array-functions/#arraycompact
从数组中删除连续的重复元素。结果值的顺序由源数组中的顺序决定。
我正在尝试获取
的结果types | name |
---|---|
fruit | banana, apple, guaba, strawberry |
来自 table 数据库,如
table: 水果
types | name |
---|---|
fruit | banana |
fruit | apple |
fruit | guaba |
fruit | strawberry |
我知道 MySQL 我可以使用 group_concat 通过使用
得到我想要的结果SELECT group_concat(name), types FROM fruits
我做了研究,人们建议我在 clickhouse 中使用 groupArray 以获得类似的结果,但这不是我想要的。因为当我使用
SELECT groupArray(name), types FROM fruits GROUP BY types
它给了我
的结果types | name |
---|---|
fruit | apple, banana, banana, strawberry,strawberry,strawberry, guaba,guaba,guaba,guaba |
groupArray 的顺序混乱,我似乎找不到解决顺序的答案:(
在 clickhouse 中有什么方法可以让我们按顺序获得结果数组?为什么会有重复的结果?
我不能使用 groupUniqArray,因为有时我的结果应该是
banana, apple, guaba, strawberry, strawberry(如果草莓在 DB 中有两次)
如何保留重复的数据而不按顺序相乘???
- 我有 input_time 的数据和密钥,所以我的 table 类似于
types | name | input_time | key |
---|---|---|---|
fruit | banana | 01:01 | 01 |
fruit | apple | 01:02 | 01 |
fruit | guaba | 01:03 | 02 |
fruit | strawberry | 01:04 | 03 |
fruit | strawberry | 01:05 | 04 |
忘记了 'types',我想在数据库保存顺序(input_time 顺序)中按键获取分组名称的结果。我应该如何更改我的查询?
我试过了
SELECT groupArray(name), key FROM fruits GROUP BY key ORDER BY input_time
但它没有给我想要的结果..
在子查询中使用 order by。数组中的顺序与查询管道前一阶段行的顺序相同
select types, arrayCompact(groupArray(name)) names, length(names) len from(
select types, name from fruit order by types, input_time)
group by types
┌─types─┬─names───────────────────────────────────┬─len─┐
│ fruit │ ['banana','apple','guaba','strawberry'] │ 4 │
└───────┴─────────────────────────────────────────┴─────┘
https://clickhouse.com/docs/en/sql-reference/functions/array-functions/#arraycompact 从数组中删除连续的重复元素。结果值的顺序由源数组中的顺序决定。