#mysql #group-by
#mysql #группировать по
Вопрос:
У меня проблема с функцией группировки.
Моя mysql
таблица:
Product Color Sellout
Test1 white 80%
Test2 Red 70%
Test1 Red 90%
Test3 Black 50%
Мне нужно, чтобы это было упорядочено по распродаже, но сгруппировано по названию продуктов и цвету.
Нравится:
Test1 Red 90%
Test1 White 80%
Test2 Red 70%
Test3 Black 50%
Пожалуйста, помогите мне, я думаю, что это просто, но я схожу с ума!
Комментарии:
1. Можете ли вы поделиться деталями этих правил сортировки? Что вы подразумеваете под «упорядоченным по распродаже, но сгруппированным по названию продуктов и цвету»?
Ответ №1:
Распродажа не существует в предложении GROUP-BY. Таким образом, это должно использоваться функциями агрегирования. MIN () является одним из них и является довольно легкой операцией.
Смотрите ниже.
SELECT Product, Color, MIN(Sellout) AS _SELLOUT_
FROM MY_MYSQL_TABLE
GROUP BY Product, Color
ORDER BY _SELLOUT_ DESC
Комментарии:
1. Пожалуйста, добавьте некоторое объяснение к вашему запросу — что нужно использовать
MIN
?2. Хорошо. Я добавил некоторое объяснение.
3. И почему именно вы использовали
MIN
, а неMAX
нет?4. group by оставит только 1 строку из этой группы
Ответ №2:
Я думаю, что вы пытаетесь сделать множественный порядок. Попробуйте что-то вроде этого:
ORDER BY Sellout DESC, Product, Color
или
ORDER BY Product, Color, Sellout DESC
Ответ №3:
Не зная вашей структуры таблицы, я бы сказал, что то, что вы называете сгруппированным по, — это просто другой порядок по, например
SELECT Product, Color, Sellout
FROM Table
ORDER BY Product, Sellout DESC
Результат:
Test1 Red 90%
Test1 White 80%
Test2 Red 70%
Test3 Black 50%
С помощью GROUP BY
вы «сворачиваете» строки с одинаковыми значениями из столбца group-by и применяете функцию агрегирования (подобную SUM
) для всех других (выбранных) столбцов.
Группировка по запросу и результату выглядит следующим образом:
SELECT Product, AVG(Sellout)
FROM Table
Результат:
Test1 85
Test2 70
Test3 50
Ответ №4:
Если я применяю эти запросы, это нормально, только когда данные не такие :
Цвет товара Распродажа Тест1 белый 80% Тест2 Красный 70% Тест1 красный 90% Тест3 черный 50% Тест3 красный 99%
Результат должен быть
Цвет товара Распродажа Test3 Красный 99% Test3 Черный 50% Test1 красный 90% Test1 белый 80% Test2 Красный 70%