2016-11-25 72 views
2

假设我有表SQL:分区柱,随机分区内排序结果

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

哪些DBMS您使用的? –

回答

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