我有一个mock包含一些字符串值的表:
CREATE TABLE mock (prop_a TEXT, prop_b TEXT);
Run Code Online (Sandbox Code Playgroud)
一些随机数据
INSERT INTO mock (prop_a, prop_b) SELECT 'fake_a' || (i % 100), 'fake_b' || (i % 100) FROM generate_series(1, 100000) i
Run Code Online (Sandbox Code Playgroud)
我想以数组的形式获取值的摘要。
就像是:
SELECT array_agg(DISTINCT prop_a), array_agg(DISTINCT prop_b) FROM mock
Run Code Online (Sandbox Code Playgroud)
假设我只想为每列取 10 个不同的值(向用户显示示例)。
一个人可以做
SELECT agg_a.array_agg, agg_b.array_agg
FROM
(SELECT array_agg(prop_a)
FROM
(
SELECT DISTINCT prop_a
FROM mock
LIMIT 10
) dist_a) agg_a,
(SELECT array_agg(prop_b)
FROM
(
SELECT DISTINCT prop_b
FROM mock
LIMIT 10
) dist_b) agg_b
Run Code Online (Sandbox Code Playgroud)
但理想情况下会有这样的语法:
SELECT array_agg(DISTINCT prop_a LIMIT 10), array_agg(DISTINCT prop_b LIMIT 10) FROM mock
Run Code Online (Sandbox Code Playgroud)
但我在文档中没有找到类似的内容。有类似的东西吗?或者至少是一种至少麻烦的查询方式?
您可以采用适当的数组切片:
SELECT (array_agg(DISTINCT prop_a))[1:10],
(array_agg(DISTINCT prop_b))[1:10]
FROM mock;
Run Code Online (Sandbox Code Playgroud)