Eu tenho 3 mesas
Tabela: agentes
Id | Name
---+------
1 | a
2 | b
3 | c
Mesa: passageiros
Id | AgentReference | Name
---+----------------+-----
1 | 1 | E
2 | 1 | F
3 | 3 | ddd
Tabela: visa_by_agent
Id | agentId | visa_id | Total | Used
---+---------+---------+-------+------
1 | 1 | aa | 10 | 1
2 | 1 | bb | 20 | 2
3 | 3 | dd | 10 | 5
Quero mostrar o resultado como
agentId | agentName | TotalPassenger | TotalVisa | TotalUsed
--------+-----------+----------------+-----------+-----------
1 | a | 2 | 30 | 3
2 | b | 0 | 0 | 0
3 | c | 1 | 10 | 5
Eu tentei com isso e obtive um erro de sintaxe
select
a.Id, a.Name,
vba.total, vba.used p.num_passengers
from
agents a
left join
(select
vba.AgentId, sum(Total) as Total, sum(Used) as Used
from
visa_by_agent vba
group by
vba.AgentId) vba on a.Id = vba.AgentId
left join
(select p.AgentReference, count(*) as num_passengers
from passengers p
group by p.AgentReference) p on a.Id = p.AgentReference
group by
agents.Id
Você está unindo ao longo de diferentes dimensões, resultando em um produto cartesiano. Agregue antes de entrar:
select a.Id, a.Name, vba.total, vba.used, p.num_passengers
from agents a left join
(select vpa.AgentId, sum(Total) as Total, sum(Used) as Used
from visa_by_agent vba
group by vba.AgentId
) vba
on a.Id = vba.AgentId left join
(select p.agentId, count(*) as num_passengers
from passengers p
group by p.agentId
) p
on a.Id = p.AgentId
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras