Использование ORDER BY и GROUP BY
Помогите пожалуйста разобраться с запросом. Мне нужно посчитать стоимость всех экземпляров каждого автора без учета книг «Идиот» и «Белая гвардия». В результат включить только тех авторов, у которых суммарная стоимость книг более 5000 руб и результат отсортировать по убыванию стоимости.
SELECT author, SUM(price*amount) AS Стоимость
FROM book
WHERE title <> 'Идиот' AND title <> 'Белая гвардия'
GROUP BY author,price
HAVING SUM(price*amount)>5000
ORDER BY price DESC;
Отобраны неверные записи
Query result:
| author | Стоимость |
|---|---|
| Есенин С.А. | 9750.00 |
Affected rows: 1
Ответы (1 шт):
author, SUM(price*amount) - дает по всем книгам одного автора, а не в разрезе автор и книга
GROUP BY author,price - группирует по автору и цене тоесть вы получите сумму по конкретной цене (если она была одна на все книги одного автора то один результат, если цена разная, то столько раз будет складывать
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=89dfbd23b43ae25394f5a86e3e5eefca
вот пример реализации.
SELECT author, SUM(price*amount) AS Стоимость
FROM book
WHERE title not in('Идиот','Белая гвардия')
GROUP BY author
HAVING SUM(price*amount)>5000
ORDER BY SUM(price*amount) DESC;
PS в ордере можно обращаться к присвоеному имени поля если поместить запрос в подзапрос:
SELECT * FROM
(SELECT author, SUM(price*amount) AS Стоимость
FROM book
WHERE title not in('Идиот','Белая гвардия')
GROUP BY author
HAVING SUM(price*amount)>5000) AS T
ORDER BY Стоимость DESC;