我有两个表:Ambulances
和Responders
。 Responder
表格有一个call_sign
列,Ambulances
表格有4列 - call_sign_1, call_sign_2, call_sign_3, call_sign_4
。
我想编写一个查询来列出每个call_sign以及它在数据库中出现的次数(即每个响应者已经参加了多少次呼叫 - 包括救护车中的呼叫)。我创建的查询不止一次显示一些call_sign。
我希望将它们分组,以便每个call_sign只显示一次。
SELECT * FROM (
select call_sign as call_sign, count(call_sign) as `call_sign_count` from responders group by call_sign
UNION ALL
select call_sign_1 as call_sign, count(call_sign_1) as `call_sign_count` from ambulances group by call_sign
UNION ALL
select call_sign_2 as call_sign, count(call_sign_2) as `call_sign_count` from ambulances group by call_sign
UNION ALL
select call_sign_3 as call_sign, count(call_sign_3) as `call_sign_count` from ambulances group by call_sign
UNION ALL
select call_sign_4 as call_sign, count(call_sign_4) as `call_sign_count` from ambulances group by call_sign
)
a WHERE call_sign IS NOT NULL Group By call_sign, call_sign_count
数据库和查询可以在这个小提琴中找到:
答案 0 :(得分:2)
是的,它会多次显示相同的call_sign
,因为在外部查询中,您可以在call_sign
和 call_sign_count
上进行分组。如果您希望每个call_sign
只出现一次,那么您只能对该字段进行分组并使用call_sign_count
上的聚合函数,让我们说sum()。
SELECT call_sign, sum(call_sign_count) total_call_sign_count FROM (
select call_sign as call_sign, count(call_sign) as `call_sign_count` from responders group by call_sign
UNION ALL
select call_sign_1 as call_sign, count(call_sign_1) as `call_sign_count` from ambulances group by call_sign
UNION ALL
select call_sign_2 as call_sign, count(call_sign_2) as `call_sign_count` from ambulances group by call_sign
UNION ALL
select call_sign_3 as call_sign, count(call_sign_3) as `call_sign_count` from ambulances group by call_sign
UNION ALL
select call_sign_4 as call_sign, count(call_sign_4) as `call_sign_count` from ambulances group by call_sign
)
a WHERE call_sign IS NOT NULL Group By call_sign