MySQL запрос для противоположности GROUP BY или DISTINCT? - PullRequest
0 голосов
/ 17 ноября 2018

У меня есть ответ ниже, который работал хорошо для меня:

Теперь вместо того, чтобы выбирать отличные или сгруппированные по, я хочу выбрать все эти записи ext_no, имеющие value ноль только.

Как изменить этот ответ? Я попытался использовать заказ по, но он показывает ошибку. Любая помощь будет оценена. Заранее спасибо.

SELECT   ext_no, MAX(value)
FROM     test
GROUP BY ext_no
HAVING   COUNT(*) > 2 AND 
         COUNT(*) = COUNT(CASE value WHEN 0 THEN 1 END)

1 Ответ

0 голосов
/ 17 ноября 2018

Есть несколько способов добиться этого.Использование пары коррелированных подзапросов в предложении 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

...