sql - 如何为三个表编写此查询
问题描述
我有 3 张桌子
表:代理
Id | Name
---+------
1 | a
2 | b
3 | c
表:乘客
Id | AgentReference | Name
---+----------------+-----
1 | 1 | E
2 | 1 | F
3 | 3 | ddd
表:visa_by_agent
Id | agentId | visa_id | Total | Used
---+---------+---------+-------+------
1 | 1 | aa | 10 | 1
2 | 1 | bb | 20 | 2
3 | 3 | dd | 10 | 5
我想显示结果
agentId | agentName | TotalPassenger | TotalVisa | TotalUsed
--------+-----------+----------------+-----------+-----------
1 | a | 2 | 30 | 3
2 | b | 0 | 0 | 0
3 | c | 1 | 10 | 5
我试过这个并得到语法错误
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
解决方案
尝试子查询而不是连接。
SELECT
id AS agentId,
name AS agentName,
(SELECT count(*) FROM passengers WHERE agentId = a.id) AS TotalPassenger,
(SELECT COALESCE(sum(Total), 0) FROM visa_by_agent WHERE agentId=a.id) AS TotalVisa
FROM
agents AS a;
推荐阅读
- amazon-web-services - 环境因进入已终止状态而无法启动
- c - 使用 C 将整数数组写入文件
- c# - 我有 3 个脚本,其中一个复制了一个脚本,第三个应该创建对象,但我无法获取这些对象。我怎样才能得到对象?
- python - 在字符串序列中提取列表
- loadrunner - C在使用mysql yog时解释内存访问冲突
- google-cloud-dataflow - Apache Beam RetryTransientErrors/neverRetry 不尊重 table not found 错误
- css - 如何在不使用绝对位置的情况下做一些事情
- python - Python QtNetwork.QTcpSocket.readAll() 和 QtNetwork.QTcpSocket.write() 不起作用
- webpack - 网页包 4 | pug 文件不会自动编译
- javascript - 在 Angular 6 中拖放表格行