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

Какие СУБД вы используете? –

ответ

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 
Смежные вопросы