我有一个表mock有一些字符串值:

CREATE TABLE mock (prop_a TEXT, prop_b TEXT);

一些随机数据
INSERT INTO mock (prop_a, prop_b) SELECT 'fake_a' || (i % 100), 'fake_b' || (i % 100) FROM generate_series(1, 100000) i

我想获得数组形式的值摘要。
类似于:
SELECT array_agg(DISTINCT prop_a), array_agg(DISTINCT prop_b) FROM mock

假设,我只想为每一列取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


但理想情况下,语法应该是:
SELECT array_agg(DISTINCT prop_a LIMIT 10), array_agg(DISTINCT prop_b LIMIT 10) FROM mock

但我在文件里没有找到类似的东西。有类似的东西吗?或者至少是一种最简单的查询方式?

最佳答案

您可以获取适当的数组切片:

SELECT (array_agg(DISTINCT prop_a))[1:10],
       (array_agg(DISTINCT prop_b))[1:10]
FROM mock;

关于postgresql - 取样前n个不同的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57805709/

10-15 18:22