Есть несколько способов добиться этого.Использование пары коррелированных подзапросов в предложении WHERE
или присоединение к таблице, содержащей значения MAX(value)
и COUNT(*)
для каждого значения ext_no
:
Запрос 1
SELECT ext_no
FROM test t1
WHERE NOT EXISTS (SELECT *
FROM test t2
WHERE t2.ext_no = t1.ext_no AND value != 0)
AND (SELECT COUNT(*)
FROM test t3
WHERE t3.ext_no = t1.ext_no) > 2
Первый подзапрос проверяет, что у этого ext_no
нет value
, кроме 0. Второй проверяет, что существует более 2 копий этого ext_no
.
Запрос 2
В этом запросе мы применяем все условия (без ненулевых значений value
и более 2 копий ext_no
) в условии JOIN
.
SELECT t1.ext_no
FROM test t1
JOIN (SELECT ext_no, MAX(value) AS max_value, COUNT(*) AS count
FROM test
GROUP BY ext_no) t2
ON t2.ext_no = t1.ext_no AND t2.max_value = 0 AND t2.count > 2
Вывод (для обоих запросов)
ext_no
12133
12133
12133
11505
11505
11505
11505
Демонстрация по SQLFiddle