2016-11-25 71 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