Athena(prestoDB)でgroup byしたあとあるカラムの内容を最初のN件だけとってかえすSQL
目標
Group byで、ユーザアカウントしたものの、サンプルとして、いくつかUidsを返したい limit
してArrayにいれられればいいのだが、残念ながら無い
解決策
tableは、
group_columnとuser_idの2つだけの簡単なものでサンプルを以下に記す
SELECT group_column,
slice(array_agg(distinct user_id), 1, 2) AS uids,
count(distinct user_id) AS cnt
FROM db.my_table
GROUP BY group_column
ORDER BY cnt DESC limit 10;
これで
group_column | uids | cnt |
---|---|---|
A | [1, 2] | 10 |
B | [11, 12] | 6 |
C | [17, 18] | 4 |
という結果が得られる
ポイント
slice(array_agg(distinct user_id), 1, <取りたい数>)
array_agg(x) → array<[same as input]>
slice(array_agg(distinct user_id), 1, <取りたい数>)
aggregate functionのarray_agg
を使って、GroupされたものをArrayにする
slice(x, start, length) → array
array function の slice
を使って切る
一番最初から撮りたいときは、startは0ではなく1!!!
aggregation functionとarray functionの詳細
Author And Source
この問題について(Athena(prestoDB)でgroup byしたあとあるカラムの内容を最初のN件だけとってかえすSQL), 我々は、より多くの情報をここで見つけました https://qiita.com/nakamasato/items/ccf7f1af002cabc4710d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .