2015-06-04 2 views
1

У меня есть три таблицы:Получить первые 10 строк для каждой группы

Customer(IdCustomer, Name) 
Product(IdProduct, Product) 
Order(IdProduct, IdCustomer, nbOrders) 

So в Заказать таблицу магазинов, сколько раз клиент заказал продукт.

Мне нужен вид, как это:

TopOrder(Name, Product, nbCommands) 

Но я хочу только 10 продуктов для каждого клиента, те, которые он заказал самое, и я не могу понять это.

ответ

3

Функция dense_rank окна должна быть именно то, что доктор прописал:

CREATE View TopOrder AS 
SELECT Name, Product, nbOrders 
FROM (SELECT Name, Product, nbOrders, 
       DENSE_RANK() OVER (PARTITION BY o.idCustomer 
            ORDER BY nbOrders DESC) AS rk 
     FROM Customer c 
     JOIN Orders o ON c.idCustomer = o.idCustomer 
     JOIN Product p ON p.idProduct = o.idProduct 
     ) t 
WHERE rk <= 10