抽取前 n 个不同元素的样本

Gab*_*eim 3 postgresql

我有一个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)

但我在文档中没有找到类似的内容。有类似的东西吗?或者至少是一种至少麻烦的查询方式?

Lau*_*lbe 5

您可以采用适当的数组切片:

SELECT (array_agg(DISTINCT prop_a))[1:10],
       (array_agg(DISTINCT prop_b))[1:10]
FROM mock;
Run Code Online (Sandbox Code Playgroud)