如何使用ROLLUP过滤SQL查询

问题描述 投票:2回答:1

这个查询:

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,以及所有相关数据。所以我会看到所有A和所有C,但不是B.

如果我添加HAVING COUNT(*)> 2,则会影响所有值。我会看到第1和第6行。

我也厌倦了HAVING分组(count(*))> 2但是得到错误“无法对包含聚合或子查询的表达式执行聚合函数。”我是SQL的新手,所以我不知道这是否与我想要做的有关。

谢谢!

sql having rollup
1个回答
1
投票

使用存在如下

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)
© www.soinside.com 2019 - 2024. All rights reserved.