我的表可以有数百列。
我们不需要 5 行。我们也可以有一行,其中的值被连接起来。
我可以使用以下查询从单列中选择前 5 个频繁值
SELECT col1 FROM table GROUP BY col1 ORDER BY count(*) DESC LIMIT 5
但我想要每列中的前 5 个频繁值。我正在尝试使用WITH 子句,例如。
WITH top_5_col1 AS (
SELECT col1 FROM table GROUP BY col1 ORDER BY count(*) DESC LIMIT 5
),
top_5_col2 AS (
SELECT col2 FROM table GROUP BY col2 ORDER BY count(*) DESC LIMIT 5
)
SELECT
STRING_AGG(top_5_col1.col1, ','::text) as col1,
STRING_AGG(top_5_col2.col2, ','::text) as col2
FROM top_5_col1, top_5_col2;
可能有数百列。实现这一目标的更好方法是什么?
最好写一个这样的函数
然后使用 information_schema 来计算前 5 个值
该查询返回这样的结果