Использование 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 шт):

Автор решения: Maksym Chepak

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;
→ Ссылка