Функция упорядочения Mysql

#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%