2017-11-13 14 views
1

私は2つのテーブル:AmbulancesRespondersを持っています。 Responderテーブルには1つのcall_signカラムがあり、Ambulancesテーブルには4カラム(call_sign_1, call_sign_2, call_sign_3, call_sign_4)があります。UNION ALLでGROUP BYを使用すると結果がグループ化されない

すべてのcall_signとそれがデータベースに表示される回数(つまり、各レスポンダが通話したコールの数 - 救急車のコール数を含む)を書きたいとします。私が作成したクエリは、いくつかのcall_signを複数回表示します。

私はそれらをグループ化して、各call_signが1回だけ表示されるようにしたいと思います。

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 

databseとクエリは、このフィドルで見つけることができます:

https://www.db-fiddle.com/f/9grxeiA277KtUqsiUbYMA8/0

答えて

2

はい、それはcall_signcall_sign_count上であるため、外部クエリをグループに同じcall_sign複数回表示されます。各call_signを1回だけ表示するには、そのフィールドでグループ化し、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 
関連する問題