Самый покупаемый товар в магазине SQL

Привет, я сейчас пытаюсь сделать школьный проект, сохраняя заказы из пиццерии в MySQL. Я хочу отсортировать эти заказы, чтобы найти самую покупаемую пиццу и количество проданных пицц.

Мои таблицы выглядят так.. Таблица с идентификатором заказа, номером проданной пиццы и количеством этой пиццы продано за один заказ

Я попытался запустить что-то вроде этого. ВЫБЕРИТЕ номер как наиболее покупаемый, кол-во ИЗ odetails СГРУППИРОВАТЬ ПО номеру ORDER BY SUM(qty) DESC LIMIT 5;

Но это не суммирует количество, так как № 5 и 1 покупаются 6 раз, а не 3 и 2 .. С запросом, который я написал, похоже, выводится наибольшее количество из наиболее покупаемых ..

Таблица с номером самой покупаемой пиццы и количеством (которое я хочу суммировать)

Я надеюсь, что кто-то может нам помочь, мы как бы застряли здесь .. Большое спасибо :)


person Thor Christensen    schedule 13.11.2019    source источник


Ответы (2)


Вы просто просите его дать вам количество из этой строки, а не СУММУ количеств в группе:

SELECT nr AS mostbought, SUM(qty) AS qtysum
FROM odetails
GROUP BY nr
ORDER BY qtysum DESC
LIMIT 5;

Это суммирует количества внутри группы, сгруппированные по столбцу без псевдонимов nr, упорядоченные по сумме количеств, используя указанный для этого псевдоним qtysum. Я избегал повторного использования имени qty, так как вам следует избегать использования столбцов, существующих в вашем источнике данных, в качестве псевдонимов, это может запутать базу данных.

Я сделал быстрый пример этого здесь, хотя я не знаю, что на самом деле представляет собой ваш столбец nr, поэтому я просто использовал буквы, он будет работать так же хорошо с любым типом данных: SQLFiddle

person Andrew    schedule 13.11.2019
comment
GROUP BY 1 ORDER BY 2 надеюсь, вы не пишете SQl таким образом, когда у вас есть страницы размера A4, достойные SQL-запроса. Это очень подверженный ошибкам запрос может дать неверные данные или вообще не работать, когда вы измените порядок столбцов выбора и забыли об этой части GROUP BY 1 ORDER BY 2.. Так что будьте осторожны, используя это.. - person Raymond Nijland; 13.11.2019
comment
@RaymondNijland Достаточно честно - я удалил номера столбцов из предложений и напрямую использовал псевдоним. Для чего-то такого короткого это не имело особого значения, но лучше всего быть более конкретным. - person Andrew; 13.11.2019
comment
Спасибо за ответ с хорошим объяснением для новичка, как я :) - person Thor Christensen; 13.11.2019
comment
Устаревание @RaymondNijland, хотя и редко фактически удаляет функциональность, чтобы предотвратить поломку устаревшего кода, который использовал эту функциональность, при обновлении или переходе на новую версию. Не только в SQL, но и во всех других языках, которые были удалены из стандартов, но все же работает. - person Andrew; 13.11.2019
comment
удаление, хотя редко на самом деле удаляет функциональность, чтобы предотвратить поломку устаревшего кода, который использовал эту функциональность, при обновлении или переходе на новую версию я согласен, я также должен был сказать, что в идеале MySQL не должен больше разрешать этот синтаксис, поскольку это просто подвержено ошибкам при использовании, кроме того, что оно устарело .. Что ж, PHP удалил плохие устаревшие старые функции mysql_* из PHP 7, которые долгое время устарели, поэтому это происходит.. Но теперь мы движемся далеко от темы .. - person Raymond Nijland; 13.11.2019

SELECT nr как наиболее покупаемый, SUM(qty) FROM odetails GROUP BY 1 ORDER BY 2 DESC LIMIT 5;

person Greg Patnude    schedule 13.11.2019
comment
GROUP BY 1 ORDER BY 2 надеюсь, вы не пишете SQl таким образом, когда у вас есть страницы размера A4, достойные SQL-запроса. Это очень подверженный ошибкам запрос может дать неверные данные или вообще не работать, когда вы измените порядок столбцов выбора и забыли об этой части GROUP BY 1 ORDER BY 2.. Так что будьте осторожны, используя это.. - person Raymond Nijland; 13.11.2019
comment
.. также этот ответ должен иметь объяснение, почти уверен, что этот ответ будет помечен системой как низкокачественный и может быть удален голосованием в будущем.. .. - person Raymond Nijland; 13.11.2019