Группировать по условию, возможно ли? - MySQL

Узнай цену своей работы

Формулировка задачи:

Возможно ли группировать записи, если к примеру поле `type` > 0, а если `type` = 0 - То не группировать К примеру такая таблица:
Листинг программы
  1. CREATE TABLE `test` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `type` INT(11) NOT NULL DEFAULT '0',
  4. `name` VARCHAR(255) NOT NULL DEFAULT '',
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  7. INSERT INTO `test` (`type`,`name`) VALUES
  8. ('0','Запись 1'),
  9. ('1','Запись 2'),
  10. ('1','Запись 3'),
  11. ('2','Запись 4'),
  12. ('2','Запись 5'),
  13. ('0','Запись 6'),
  14. ('0','Запись 7');
Как на выходе получить ? 0 - Запись 1 1 - Запись 2 2 - Запись 4 0 - Запись 6 0 - Запись 7 Запрос вида:
Листинг программы
  1. SELECT *
  2. FROM `test`
  3. GROUP BY `type`
  4. HAVING `type` > 0;
Возвращает: 1 - Запись 2 2 - Запись 4
Без HAVING соответственно будет 3 записи:
Листинг программы
  1. SELECT *
  2. FROM `test`
  3. GROUP BY `type`;
Возвращает: 0 - Запись 1 1 - Запись 2 2 - Запись 4
Похоже что вот этот запрос то что мне нужно:
Листинг программы
  1. SELECT *
  2. FROM `test`
  3. GROUP BY CASE WHEN `type` > '0' THEN `type` ELSE `type` + `id` END;

Решение задачи: «Группировать по условию, возможно ли?»

textual
Листинг программы
  1. mysql> SELECT * FROM `test` WHERE `type` !=0 GROUP BY TYPE
  2.     -> UNION ALL
  3.     -> SELECT * FROM `test` WHERE `type` =0 ORDER BY name;
  4. +----+------+----------------+
  5. | id | TYPE | name           |
  6. +----+------+----------------+
  7. | 14 |    0 | Запись 1       |
  8. |  1 |    0 | Запись 1       |
  9. |  2 |    1 | Запись 2       |
  10. |  8 |    0 | Запись 4       |
  11. |  4 |    2 | Запись 4       |
  12. | 11 |    4 | Запись 4       |
  13. | 13 |    0 | Запись 5       |
  14. | 12 |    3 | Запись 5       |
  15. |  6 |    0 | Запись 6       |
  16. |  7 |    0 | Запись 7       |
  17. +----+------+----------------+
  18. 10 ROWS IN SET (0.01 sec)

Объяснение кода листинга программы

  1. Сначала мы выбираем все строки из таблицы test, где type не равно 0 и группируем их по значению TYPE.
  2. Затем мы выбираем все строки из таблицы test, где type равно 0 и сортируем их по значению name.
  3. Результаты обоих запросов объединяются в один набор результатов.
  4. В результате мы получаем таблицу с тремя столбцами: id, TYPE и name. В столбце id отображаются уникальные идентификаторы записей, в столбце TYPE отображается значение, по которому были сгруппированы строки в первом запросе, а в столбце name отображаются значения из второго запроса.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут