1 select
2 user_id,
3 arr[0],
4 arr[1],
5 arr[2]
6 from(
7 select
8 user_id,
9 sort_array(collect_list(order_id)) as arr
10 from(
11 SELECT
12 t3.*,
13 ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY cnt DESC) rn
14 FROM (
15 select
16 user_id,
17 order_id ,
18 count(1) cnt
19 from
20 t2
21 group by
22 user_id, order_id
23 ) t3
24 )t4
25 WHERE
26 t4.rn <= 3
27 group by
28 user_id
29 ) t5;
例二:实现如下功能:
select
uid,
max(case when d = 20220101 then num else 0 end) as d1,
max(case when d = 20220102 then num else 0 end) as d2
from (
select
20220101 as d,
1111 as uid,
10 as num
union all
select
20220101 as d,
222 as uid,
6 as num
union all
select
20220102 as d,
1111 as uid,
8 as num
union all
select
20220102 as d,
222 as uid,
16 as num
) t1
group by uid;