Как отфильтровать SQL-запрос с помощью ROLLUP - PullRequest
2 голосов
/ 18 апреля 2019

Этот запрос:

SELECT 1, 2, count(*) 
FROM t
GROUP BY ROLLUP (1, 2)
ORDER BY 1, 2

Показывает:

1, 2 
A Null 3
A Blue 2
A Neon 1
B NULL 2
B Navy 2
C NULL 4
C Neon 2
C Blue 2

Вы видите суммы A = 3, B = 2 и C = 4?

Я хочу отфильтровать, чтобы показывать только, если SUM больше 2, и все связанные данные. Так что я бы увидел все А и все С, но не Б.

Если я добавлю HAVING COUNT (*)> 2 это влияет на все ценности. Я бы увидел строки 1 и 6.

Я тоже устал ИМЕЮЩАЯСЯ группировки но получите ошибку «Невозможно выполнить агрегатную функцию для выражения, содержащего агрегат или подзапрос». Я немного новичок в SQL, поэтому не знаю, связано ли это с тем, что я пытаюсь сделать.

Спасибо!

1 Ответ

1 голос
/ 18 апреля 2019

использование существует, как показано ниже

select a.* from 
(
SELECT col1, col2, count(*) as cnt
FROM t
GROUP BY ROLLUP (col1, col2)
) a where 
 exists ( select 1 from 
   (

    SELECT 1, 2, count(*) as cnt
    FROM t
    GROUP BY ROLLUP (1, 2)

   ) b where a.col1=b.col1 and b.cnt>2)
...