Как выбрать несколько столбцов без дубликатов в одном столбце в Oracle - PullRequest
0 голосов
/ 25 сентября 2011

Проблема: мне нужно найти лучшего клиента для поставщика.Топ-клиент имеет максимальную сумму предметов на все заказы.Если у поставщика 2 топ-клиента, то топ-клиент будет с минимальным идентификатором заказа, что означает - кто первым создал заказ и получит максимальное количество товаров - это будет топ.Я писал этот код SQL:

select s.s_id, c.c_id, min(o.o_id), count(*)
from suppliers s, clients c, orders o, items i
where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o
group by s.s_id, c.c_id
order by 4 desc, 3

и получаю этот результат: http://imageshack.us/photo/my-images/148/32969388.jpg/

но мне нужно получить: http://imageshack.us/photo/my-images/842/51815927.jpg/

1 Ответ

1 голос
/ 25 сентября 2011

Вам нужно оценить количество заказов и ID. Поэтому вы должны использовать аналитические и встроенные представления. Что-то вроде:

select s_id
       , c_id
       , min_order_id
       , no_of_orders
from (
    select s_id
           , c_id
           , min_order_id
           , no_of_orders
           , rank() over (partition by s_id 
                          order by no_of_orders DESC, min_order_id ASC) rnk
    from (
        select s.s_id
               , c.c_id
               , min(o.o_id) as min_order_id
               , count(*) as no_of_orders
        from suppliers s, clients c, orders o, items i
        where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o
        group by s.s_id, c.c_id
        )
    )    
where rnk=1
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...