Сложный запрос, выборка с группировкой - 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)

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

  1. Создаётся подзапрос с выборкой из таблицы grp по полю id и суммой по трём полям name: 'Саша', 'Вася', 'Гена'.
  2. Результат подзапроса сохраняется в временную таблицу с именем v.
  3. Во временной таблице считаются следующие поля: count_1, count_2, count_3.
  4. Основной запрос выбирает из временной таблицы v только те строки, где выполняется хотя бы одно из условий: (v.count_1 > 0 AND v.count_2 > 0) OR (v.count_1 >0 AND v.count_3 > 0).
  5. Результатом запроса будет набор строк из таблицы grp, удовлетворяющих условию.

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


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

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

8   голосов , оценка 4.5 из 5