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

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

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

Возможно ли группировать записи, если к примеру поле `type` > 0, а если `type` = 0 - То не группировать К примеру такая таблица:
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');
Как на выходе получить ? 0 - Запись 1 1 - Запись 2 2 - Запись 4 0 - Запись 6 0 - Запись 7 Запрос вида:
SELECT * 
FROM `test`
GROUP BY `type`
HAVING `type` > 0;
Возвращает: 1 - Запись 2 2 - Запись 4
Без HAVING соответственно будет 3 записи:
SELECT * 
FROM `test`
GROUP BY `type`;
Возвращает: 0 - Запись 1 1 - Запись 2 2 - Запись 4
Похоже что вот этот запрос то что мне нужно:
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)

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

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

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


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

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

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