2017-08-13 3 views
1

私は現在、そのようなイベントの起源を追跡する一連のイベントを追跡しているテーブルを持っています。 私は現在、このようなイベントの起源をすべてまとめたレポートを作成しています。私はいくつかのフィールドを省略しているし、それはただのサンプルデータです集計クエリを作成する別の方法

------------------------------------- 
| company_id | source | date | 
------------------------------------- 
| 156012  | facebook | 2016-08-22| 
| 156012  | twitter | 2016-08-22| 
| 156012  | facebook | 2016-08-12| 
| 160781  | twitter | 2016-07-20| 
| 160781  | twitter | 2016-07-20| 

を次のように

テーブルには思えます。私は、イベントごとに各企業にイベントを数えるレポートを集めています。私はそれをこのよう

select company_id, 
    sum(if(track.source = 'facebook', 1,0)) as facebook, 
    sum(if(track.source = 'twitter', 1,0)) as twitter, 
from event_tracks as track 
group by franchise_id 
order by total_clicks desc limit 10; 
をやっている現在、この

| company_id | facebook | twitter | 
------------------------------------ 
| 156012  |  2 |  1 | 
| 150781  |  2 |  0 | 

のようなものを見て、私のレポートをしたいと思い、私は としてかもしれないソースフィールドをこれを行うには良い方法があるかどうかを知りたいです

広範囲の値を取るので、レポート は大きなデータにはあまり適していません。 MySQLはすでにまた、1または0にブール値を評価して

+2

私はより良い方法は、アプリケーションでこのようなデータ表示の問題を処理することだと思いますコード – Strawberry

+0

時にはうまくいくかもしれませんが、時には表示目的だけでなくデータが意味する場合もあるので、わからない場合があります –

+1

https://stackoverflow.com/a/12599372/3827849を参照してください。 –

答えて

1

if条件は冗長である、あなたはcompany_idとは反対に、あなたがすることによってグループ化しているキーである、franchise_idを選択することを意味しましたか?

あなたが選択されているグループからの値が気にしない場合を除き、あなただけで、あなたのグループの列を選択する必要があります。

select franchise_id, 
    sum(track.source = 'facebook') as facebook, 
    sum(track.source = 'twitter') as twitter, 
from event_tracks as track 
group by franchise_id 
order by total_clicks desc limit 10; 
+0

これはすばらしい改善ですが、クエリははるかにクリーンであるようです。 –

+0

これは質問に対処しません – Strawberry

関連する問題