Найти поставщика, который поставляет уникальный продукт - PullRequest
1 голос
/ 08 января 2020

У меня есть основной список продаж. Каждая запись содержит название продукта и поставщика каждого продукта. В некоторых случаях один и тот же продукт может быть продан многими поставщиками, но в основной записи указывается только поставщик, предоставивший продукт для этой конкретной продажи.

Что мне нужно сделать, так это найти все продукты с указанием c поставщик является единственным поставщиком, который когда-либо предоставлял этот продукт.

Например, сегодняшний основной список продаж выглядит следующим образом:

Product                     Supplier
---------------------------------------------
A4 Steering Wheel           Audi
Brembo Brake Pads           Top Parts
Brembo Brake Disks          Brakes Direct
Recaro Sports Seat          Performance Pts
Brembo Brake Pads           Performance Pts
Brembo Brake Disks          Brakes Direct
A4 sump nut                 Audi
Recaro Sports Seat          Top Parts

В приведенном выше примере меня интересуют только продукты A4 потому что они продаются напрямую Audi. Продукты Brembo и Recaro продаются несколькими поставщиками, поэтому я хочу их игнорировать. Как я могу найти все продукты, которые продаются там, где Audi является единственным поставщиком?

Мои навыки SQL очень ржавые, поэтому у меня нет никаких попыток, которые стоило бы показать, я даже близко не подошел к извлечению что я хочу! Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете сделать это с помощью GROUP BY и HAVING.

SELECT Product, MIN(Supplier)
FROM YourTable
GROUP BY Product
HAVING COUNT(*) = 1

Ваш примерный набор данных не содержит дубликатов, но если ваш реальный набор данных содержит или содержит дополнительные уникальные столбцы, такие как отметка времени, вы также можете квалифицироваться на DISTINCT поставщиков.

SELECT Product, MIN(Supplier)
FROM YourTable
GROUP BY Product
HAVING COUNT(DISTINCT Supplier) = 1
2 голосов
/ 08 января 2020

Вы можете использовать not exists:

select ms.*
from master_sales ms
where 
    ms.supplier = 'Audi'
    and not exists (
        select 1 
        from master_sales ms1 
        where ms1.product = ms.product and ms1.supplier <> ms.supplier
    )

Другим вариантом является агрегация:

select product
from master_sales
group by product
having 
    max(case when supplier = 'Audi' then 1 end) = 1
    and max(case when supplier <> 'Audi' then 1 else 0 end) = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...