【问题标题】:SQL: partitioning by column and randomly order results within the partitionsSQL:按列分区并在分区内随机排序结果
【发布时间】:2017-04-09 18:34:25
【问题描述】:

假设我有桌子

DESCRIPTION            SHOP
'tomato pizza'         'Joe'      
'vanilla ice cream'    'Joe'
'oranges'              'Mary'          
'newspapers'           'Mary'
'soap'                 'Bill'
'chips'                'Joe'
...

因此,每个商店(由其所有者标识)都销售一些产品,并且每个产品都显示在表格中,并带有文字说明。

我想做的是一次性从每个商店随机选择(针对该商店)的 10 种产品。 我知道我可以使用ORDER BY random(),但我如何才能以这样的方式使用它:首先按商店进行分离(GROUP BY/PARTITION BY?),然后对分离的结果进行随机化?

特别提到 Redshift,这是我正在使用的,应该与 PostgreSQL 语法相同。

【问题讨论】:

  • 您使用的是哪个 DBMS?

标签: sql select random amazon-redshift


【解决方案1】:

row_number 窗口函数应该可以解决问题:

SELECT description, shop
FROM   (SELECT description, shop, 
        ROW_NUMBER() OVER (PARTITION BY shop ORDER BY RANDOM()) AS rn
        FROM   mytable) t
WHERE  rn <= 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2014-12-30
    相关资源
    最近更新 更多