/ / SQL corta os resultados da tabela [closed] - sql

Resultados de corte SQL da tabela [closed] - sql

Eu tenho a seguinte consulta:

    SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM
calls, telephone

WHERE calls.from_t_no = telephone.t_no
AND
calls.duration <=60

group by telephone.cust_id, telephone.cust_name

Que dão os seguintes resultados;

cust_id cust_name duration
0123456789  Avi 18
1234567890  Benny   27
2345678901  Gadi    13
3456789012  Dalia   69
4567890123  Hilla   5
5678901234  Varda   14
7890123456  Haim    20
8901234567  Tali    20
9012345678  Yoram   46

Eu também tenho essa consulta:

SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM calls ,telephone
WHERE to_t_no = telephone.t_no
AND
calls.duration >=500
group by telephone.cust_id, telephone.cust_name

Que fornece os seguintes resultados:

cust_id cust_name   duration
2345678901  Gadi    50022
4567890123  Hilla   50000

a segunda consulta é na verdade outro filtro oucondição que a primeira consulta deve corresponder. Não consigo incluir a segunda consulta na primeira consulta porque ela usa colunas diferentes. Eu preciso "subtrair" a segunda consulta da primeira consulta.

Como faço isso?

Respostas:

0 para resposta № 1

Se você realmente pode mesclar as consultas, você pode juntar os resultados como este:

SELECT T0.cust_id, T0.cust_name, T0.duration FROM

(  SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM
calls, telephone

WHERE calls.from_t_no = telephone.t_no
AND
calls.duration <=60

group by telephone.cust_id, telephone.cust_name) T0

JOIN

(SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM calls ,telephone
WHERE to_t_no = telephone.t_no
AND
calls.duration >=500
group by telephone.cust_id, telephone.cust_name) T1

ON T0.cust_id = T1.cust_id

0 para resposta № 2

Tente postar a estrutura completa da sua mesa e descreva o que você realmente precisa.

Se eu entendi corretamente o problemaas condições que você está expondo são mutuamente exclusivas. Eu acho que não é possível que qualquer registro corresponda às duas condições porque a consulta final ficará assim:

SELECT cust_id,cust_name,SUM(calls.duration) as duration
FROM calls ,telephone
WHERE
to_t_no = telephone.t_no
AND calls.from_t_no = telephone.t_no
AND calls.duration <=60
AND calls.duration >=500
group by telephone.cust_id, telephone.cust_name;

Se o que você quer é uma solução geral para fazer uma "consulta sobre uma consulta" você pode usar esse tipo de sentença:

SELECT field1, field2 FROM
(SELECT field1, field2, ..., fieldn FROM table WHERE condition) AS filteredTable
WHERE anyCondition;