我有下表 -
MOBILE AMOUNT
-----------------
M1 10
M1 20
M1 30
M2 40
M2 10
M3 30
我想找到总数超过40的不同手机的数量。
所以我用内部查询编写了查询 -
select count(mobile)
from
(
select mobile,sum(amount)
from TAB
group by mobile
having sum(amount) >40
)
有没有办法用普通查询写这个,即没有内部查询。
需要输出(因为只有M1和M2具有总和(量)> 40) -
CNT
---
2
答案 0 :(得分:1)
也许是这样的?
SQL> with test (mobile, amount) as
2 (select 'm1', 10 from dual union
3 select 'm1', 20 from dual union
4 select 'm1', 30 from dual union
5 select 'm2', 40 from dual union
6 select 'm2', 10 from dual union
7 select 'm3', 30 from dual
8 )
9 select sum(count(distinct mobile)) cnt
10 from test
11 group by mobile
12 having sum(amount) > 40;
CNT
----------
2
SQL>
答案 1 :(得分:0)
您在示例中提供的嵌套查询是正确的。您要求的汇总级别高于SUM(amount)
;你要的是结果组的数量。
在您的评论中,您提到主要关注的是当您包含聚合时,SQL语句的结构会发生变化。这就是SQL语言如何处理不同的查询语义
只更改WHERE
子句只允许交换过滤条件。
如果要对聚合特征启用过滤,则必须使用SQL的多级方法。