SQL:按列分区并随机排序分区内的结果

mar*_*tin 5 sql random select amazon-redshift

假设我有桌子

DESCRIPTION            SHOP
'tomato pizza'         'Joe'      
'vanilla ice cream'    'Joe'
'oranges'              'Mary'          
'newspapers'           'Mary'
'soap'                 'Bill'
'chips'                'Joe'
...
Run Code Online (Sandbox Code Playgroud)

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

我想要做的是一次性从每个商店随机选择 10 个产品(为该商店)。我知道我可以使用 aORDER BY random()但如何使用它,首先按商店(a GROUP BY/ PARTITION BY?)进行分离,然后对分离的结果进行随机化?

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

Mur*_*nik 4

窗口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
Run Code Online (Sandbox Code Playgroud)