如何使用 ROLLUP 过滤 SQL 查询
How to filter a SQL Query using ROLLUP
这个查询:
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 行。
我也累了
有分组(计数(*))> 2
但得到错误
"Cannot perform an aggregate function on an expression containing an aggregate or a subquery." 我是 SQL 的半新手,所以我不知道这是否与我正在尝试做的事情有关。
谢谢!
使用如下所示
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)
这个查询:
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 行。
我也累了 有分组(计数(*))> 2 但得到错误 "Cannot perform an aggregate function on an expression containing an aggregate or a subquery." 我是 SQL 的半新手,所以我不知道这是否与我正在尝试做的事情有关。
谢谢!
使用如下所示
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)