假设我有桌子
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语法相同。
答案 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