Группировать по условию, возможно ли? - MySQL
Формулировка задачи:
Возможно ли группировать записи, если к примеру поле `type` > 0, а если `type` = 0 - То не группировать
К примеру такая таблица:
Как на выходе получить ?
0 - Запись 1
1 - Запись 2
2 - Запись 4
0 - Запись 6
0 - Запись 7
Запрос вида:
Возвращает:
1 - Запись 2
2 - Запись 4
Возвращает:
0 - Запись 1
1 - Запись 2
2 - Запись 4
CREATE TABLE `test` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `type` INT(11) NOT NULL DEFAULT '0', `name` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; INSERT INTO `test` (`type`,`name`) VALUES ('0','Запись 1'), ('1','Запись 2'), ('1','Запись 3'), ('2','Запись 4'), ('2','Запись 5'), ('0','Запись 6'), ('0','Запись 7');
SELECT * FROM `test` GROUP BY `type` HAVING `type` > 0;
Без HAVING соответственно будет 3 записи:
SELECT * FROM `test` GROUP BY `type`;
Похоже что вот этот запрос то что мне нужно:
SELECT * FROM `test` GROUP BY CASE WHEN `type` > '0' THEN `type` ELSE `type` + `id` END;
Решение задачи: «Группировать по условию, возможно ли?»
textual
Листинг программы
mysql> SELECT * FROM `test` WHERE `type` !=0 GROUP BY TYPE -> UNION ALL -> SELECT * FROM `test` WHERE `type` =0 ORDER BY name; +----+------+----------------+ | id | TYPE | name | +----+------+----------------+ | 14 | 0 | Запись 1 | | 1 | 0 | Запись 1 | | 2 | 1 | Запись 2 | | 8 | 0 | Запись 4 | | 4 | 2 | Запись 4 | | 11 | 4 | Запись 4 | | 13 | 0 | Запись 5 | | 12 | 3 | Запись 5 | | 6 | 0 | Запись 6 | | 7 | 0 | Запись 7 | +----+------+----------------+ 10 ROWS IN SET (0.01 sec)
Объяснение кода листинга программы
- Сначала мы выбираем все строки из таблицы
test
, гдеtype
не равно 0 и группируем их по значениюTYPE
. - Затем мы выбираем все строки из таблицы
test
, гдеtype
равно 0 и сортируем их по значениюname
. - Результаты обоих запросов объединяются в один набор результатов.
- В результате мы получаем таблицу с тремя столбцами:
id
,TYPE
иname
. В столбцеid
отображаются уникальные идентификаторы записей, в столбцеTYPE
отображается значение, по которому были сгруппированы строки в первом запросе, а в столбцеname
отображаются значения из второго запроса.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д