Как проверить, входит ли некоторая переменная в топ-5 за 3 года? - PullRequest
0 голосов
/ 22 января 2019

надеюсь, у вас все хорошо.

Я проходил тест для компании по SQL (MySql), и был вопрос, на который я действительно не знал, как ответить. Вопрос заключался в том, «есть ли производитель, который одновременно входит в топ-5 по объему продаж за 2008, 2009 и 2010 годы?»

Таблица была довольно простой: SALEID, ПРОИЗВОДИТЕЛЬ, КОЛИЧЕСТВО, ОБЩАЯ ЦЕНА И ДАТА.

Запрос должен вернуть таблицу с 5 строками с указанием производителя и общего количества проданных товаров. Но должны появиться только те производители, которые в ТОП-5 торговых партнеров ВСЕ ВСЕ 3 ГОДА, если нет ни одного производителя, должны отображаться как «NULL» или «na» или что-либо еще, что указывает на то, что там никого нет.

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 22 января 2019

Я бы просто присоединился к 3 подзапросам с ограничениями, упорядоченными по общим продажам на одного производителя.

Для MySql 5.x в любом случае.
(отсутствует оконная функция)

SELECT 
  COALESCE(q10.Manufacturer, 'NA') as  Manufacturer,
  (q08.TotalQuantity + q09.TotalQuantity + q10.TotalQuantity) as TotalQuantity
FROM
(
    SELECT Manufacturer, SUM(Quantity) AS TotalQuantity, SUM(TotalValue) AS TotalValue
    FROM Sales
    WHERE `Date` BETWEEN '2008-01-01' AND '2008-12-31'
    GROUP BY Manufacturer
    ORDER BY TotalQuantity DESC, TotalValue DESC
    LIMIT 5
) q08
LEFT JOIN 
(
    SELECT Manufacturer, SUM(Quantity) AS TotalQuantity, SUM(TotalValue) AS TotalValue
    FROM Sales
    WHERE `Date` BETWEEN '2009-01-01' AND '2009-12-31'
    GROUP BY Manufacturer
    ORDER BY TotalQuantity DESC, TotalValue DESC
    LIMIT 5
) q09 ON q09.Manufacturer = q08.Manufacturer
LEFT JOIN
(
    SELECT Manufacturer, SUM(Quantity) AS TotalQuantity, SUM(TotalValue) AS TotalValue
    FROM Sales
    WHERE `Date` BETWEEN '2010-01-01' AND '2010-12-31'
    GROUP BY Manufacturer
    ORDER BY TotalQuantity DESC, TotalValue DESC
    LIMIT 5
) q10 ON q10.Manufacturer = q09.Manufacturer
ORDER BY TotalQuantity DESC

Тест на rextester здесь

...