@sagrus

Как сделать выборку в MYSQL группируя один столбец и выбирая кол-во значений другого?

Добрый день!

Помогите пожалуйста, голову уже сломал

Есть вот какая таблица:

id | type | id_work
----------------------
1 | 2 | 1000
2 | 4 | 1000
3 | 2 | 2000
4 | 2 | 2000
5 | 4 | 3000
6 | 4 | 3000
7 | 2 | 3000
8 | 4 | 3000
9 | 4 | 3000
Мне нужно выбрать id записей, у которых при одинаковых значениях столбца id_work в столбце type обязательно было хоть по одному значение 2 и 4.

То есть из представленного примера таблица мне нужны запист в id 1,2,7,8,9

Пояснение:
1,2 нужны потому что они относятся к работе в id_work = 1000 а в графе type есть значение 2 и 4 как минимум по одному разу (2 - один раз, 4 - один раз)
7,8,9 нужны потому что они относятся к работе в id_work = 3000 а в графе type есть значение 2 и 4 как минимум по одному разу (2 - один раз, 4 - два раза)

хэлп....
  • Вопрос задан
  • 254 просмотра
Решения вопроса 1
Эту задачу можно решить в два подхода:
  1. Выясняем, для каких значений id_work выполняется условие наличия хотя бы по одному значению для type из множества (2, 4)
  2. Для найденных значений id_work выбираем полный набор данных для type из множества (2, 4)

На практике это означает запрос использующий подзапрос для п. 1 и использование inner join дл п. 2:
SELECT
  T.id
FROM
  (
    SELECT
      id_work
    FROM
      T
    WHERE
      type IN (2, 4)
    GROUP BY
      id_work
    HAVING
      count(distinct type) = 2
  ) AS filteredIdWork
INNER JOIN
  T
ON
  T.id_work = filteredIdWork.id_work
  AND T.type IN (2, 4)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы