【问题标题】:Select random row for each group in a postgres table为 postgres 表中的每个组选择随机行
【发布时间】:2013-09-03 13:20:45
【问题描述】:

我有一张大致如下的表格:

id | category | link | caption | image

我的目标是从表中的每个不同类别中获取随机行,用于表中的所有类别。然后计划将每一行分配给其各自类别的变量。

现在我正在使用多个类似的 SELECT 语句:

SELECT link, caption, image FROM table WHERE category='whatever' ORDER BY RANDOM() LIMIT 1

但这似乎不优雅,并且会增加前往 DB 的次数,这很昂贵。

我很确定在 Postgres 中有一种使用窗口函数的方法,但我没有使用它们的经验,也不完全确定如何使用它来获得我想要的。

感谢您的帮助!

【问题讨论】:

    标签: sql postgresql window-functions


    【解决方案1】:

    尝试类似:

    SELECT DISTINCT ON (category) *
    FROM table 
    ORDER BY category, random();
    

    或者用窗口函数:

    SELECT * 
    FROM (
    SELECT *, row_number() OVER (PARTITION BY category ORDER BY random()) as rn
    FROM table ) sub
    WHERE rn = 1;
    

    【讨论】:

    • 太棒了!这两个似乎都适合我的目的。谢谢!
    猜你喜欢
    • 2013-04-09
    • 2012-06-04
    • 2019-12-02
    • 1970-01-01
    • 2016-02-26
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多