Группировать по условию, возможно ли? - 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
отображаются значения из второго запроса.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д