Сложный запрос, выборка с группировкой - MySQL
Формулировка задачи:
Добрый день, я в ступоре...
Есть таблица с полями name и group
пример:
вася 1
саша 1
петя 1
вася 2
саша 2
иван 2
гена 3
саша 3
федя 3
Как выбрать все записи тех групп, где есть имена вася И саша
т.е. в данном примере должны выводиться все аписи для group 1 и 2
Решение задачи: «Сложный запрос, выборка с группировкой»
textual
Листинг программы
SELECT v.id FROM ( SELECT grp.id , SUM( CASE WHEN grp.name = 'Саша' THEN 1 ELSE 0 END ) count_1 , SUM( CASE WHEN grp.name = 'Вася' THEN 1 ELSE 0 END ) count_2 , SUM( CASE WHEN grp.name = 'Гена' THEN 1 ELSE 0 END ) count_3 FROM grp GROUP BY grp.id ) v WHERE (v.count_1 > 0 AND v.count_2 > 0 ) OR (v.count_1 >0 AND v.count_3 > 0)
Объяснение кода листинга программы
- Создаётся подзапрос с выборкой из таблицы grp по полю id и суммой по трём полям name: 'Саша', 'Вася', 'Гена'.
- Результат подзапроса сохраняется в временную таблицу с именем v.
- Во временной таблице считаются следующие поля: count_1, count_2, count_3.
- Основной запрос выбирает из временной таблицы v только те строки, где выполняется хотя бы одно из условий: (v.count_1 > 0 AND v.count_2 > 0) OR (v.count_1 >0 AND v.count_3 > 0).
- Результатом запроса будет набор строк из таблицы grp, удовлетворяющих условию.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д