Для каждой отдельной книги необходимо вывести информацию о количестве проданных экземпляров в 2 последующих годах

Дали учебную задачу:

Для каждой отдельной книги необходимо вывести информацию о количестве проданных экземпляров и их стоимости за текущий и предыдущий год . Вычисляемые столбцы назвать Количество и Сумма. Информацию отсортировать по убыванию стоимости.

введите сюда описание изображения

Я придумал такой код:

SELECT title, SUM(buy_book.amount) AS Количество, SUM(price*buy_book.amount) AS Сумма
FROM buy_book
INNER JOIN book ON book.book_id = buy_book.book_id
INNER JOIN buy ON buy.buy_id = buy_book.buy_id
INNER JOIN buy_step ON buy_step.buy_id = buy.buy_id
WHERE buy_step.date_step_end IS NOT NULL
GROUP BY title
UNION ALL
SELECT title, COUNT(buy_archive.amount) AS Количество, SUM(buy_archive.price*buy_archive.amount) AS Сумма
FROM buy_archive
INNER JOIN book ON book.book_id = buy_archive.book_id
GROUP BY title
ORDER BY Сумма DESC;

Он конечно же полностью не отрабатывает. Не группирует он продажи этого года и прошлого, те что в buy_archive. Нужен вложенный запрос, но как его правильно построить умишки не хватает. Подскажите кто захочет.


Ответы (1 шт):

Автор решения: Alex Sklemin
SELECT title, SUM(Количество) AS Количество, SUM(Сумма) AS Сумма

FROM (SELECT book.title, SUM(buy_book.amount) AS Количество,

SUM(book.price*buy_book.amount) AS Сумма

 FROM buy_book

     INNER JOIN book USING (book_id)

     INNER JOIN buy USING(buy_id)

     INNER JOIN buy_step USING(buy_id)

     INNER JOIN step USING(step_id)

 WHERE name_step ='Оплата' AND date_step_end IS NOT NULL

GROUP BY book.title

UNION ALL

SELECT book.title, SUM(buy_archive.amount) AS Количество,

SUM(buy_archive.price*buy_archive.amount) AS Сумма

    FROM buy_archive

        INNER JOIN book USING (book_id)

GROUP BY book.title) AS qwert

GROUP BY title

ORDER BY Сумма DESC

→ Ссылка