考虑SQL语句:
SELECT key, value
FROM (
SELECT key, value, row_number() OVER (PARTITION BY key ORDER BY length(value) DESC) AS rn
FROM my_table
)
WHERE rn <= 5;
这将产生:
key value
A 1
A 2
B 10
如何使它像这样:
key values
A [1;2;3;4;5]
B [10;20;30;40;50]
SQL引擎已保存。有任何想法吗?
答案 0 :(得分:2)
map_agg
是解决方案:
SELECT key, map_agg(key, value)
FROM (
SELECT key, value, row_number() OVER (PARTITION BY key ORDER BY length(value) DESC) AS rn
FROM my_table
)
WHERE rn <= 5 group by key;
非常感谢@Shantanu Kher的最快回复!