/ / Usando duas funções agregadas com a cláusula HAVING - sql, oracle, oracle11g, hana

Usando duas funções agregadas com a cláusula HAVING - sql, oracle, oracle11g, hana

Eu tenho a tabela abaixo -

MOBILE    AMOUNT
-----------------
M1          10
M1          20
M1          30
M2          40
M2          10
M3          30

Quero encontrar a contagem de celulares distintos com valor total superior a 40.

Então, eu escrevi consulta com consulta interna como -

select count(mobile)
from
(
select mobile,sum(amount)
from TAB
group by mobile
having sum(amount) >40
)

Existe uma maneira de escrever isso com consulta simples, ou seja, sem consulta interna.

Produção necessária (como apenas M1 e M2 possuem soma (quantidade)> 40) -

CNT
---
2

Respostas:

0 para resposta № 1

A consulta aninhada que você forneceu no seu exemplo é a correta. Você está solicitando uma agregação em um nível superior ao SUM(amount); você está solicitando o número de grupos resultantes.

No seu comentário, você mencionou que a principal preocupação é que a estrutura da instrução SQL muda quando você inclui a agregação. É assim que a linguagem SQL lida com diferentes semânticas de consulta.
Apenas mudando WHERE As cláusulas permitirão apenas trocar as condições do filtro.

Se você deseja habilitar a filtragem de características agregadas, é necessário ter uma abordagem de vários níveis com o SQL.


1 para resposta № 2

Talvez algo assim?

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>