SQL:按列分区并在分区

时间:2016-11-25 11:08:43

标签: sql select random amazon-redshift

假设我有桌子

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语法相同。

1 个答案:

答案 0 :(得分:2)

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