前言
测试数据集:
ca | cb | cc |
---|---|---|
A | W | 1 |
A | W | 2 |
B | X | 1 |
B | Z | 2 |
B | Z | 4 |
按最大/最小值/TOP1去重
按ca和cb取cc最小值取值:
select
ca,
cb,
min(cc)
from table
group by ca,
cb
column_A | column_B | column_C |
---|---|---|
A | W | 1 |
B | X | 1 |
B | Z | 2 |
取最大,则使用max()函数。取一组值的TOP1也是同理。
按列合并多行(多->少)
select
ca,
cb,
groupUniqArray(cc)
from table
group by ca, cb
column_A | column_B | column_C |
---|---|---|
A | W | [2,1] |
B | X | [1] |
B | Z | [4,2] |
这是一种分组的概念,将相同的数据放在一起,需要被统计的数据放在array数据类型中。统计array,可以使用length(),获取数组长度,相当于分组count
此外,groupArray也可以满足需求。
分组排序后取TopN
SELECT ca,
groupArray(1)(cc)
FROM
( SELECT *
FROM table
ORDER BY ca,
cb,
cc )
GROUP BY ca
column_A | column_B | column_C |
---|---|---|
A | W | [1] |
B | X | [1] |
B | Z | [2] |
以上是按cc列的值升序去top1。通过order by x改变顺序,再用groupArry(N)()函数处理获取top值。