2017-12-27 10 views
0

でGROUP_CONCATを使用する私は、このクエリがありますどのように私のmysqlの

select IF(user_name IS NULL or user_name= '', distinct_id, user_name) 
     as user_info, event, count(event) as event_count 
    from mixpanel 
    where 
     (mixpanel.event = 'app_open' or 
     mixpanel.event = 'post_created' or 
     mixpanel.event = 'create_comment' or 
     mixpanel.event = 'class_opened' or 
     mixpanel.event = 'post_read') 
    AND 
     class_id = 'AKSJSDKSD' 

    group by event, user_name, distinct_id 
    order by user_name desc 

をし、それは私に次のような結果与える:私は必要なもの

+-----------+------------+--------+ 
| user_info | event | event_count | 
+-----------+------------+--------+ 
| Ben Cho | up | 12   | 
| Lee Mar | up | 21   | 
| Lee Mar | side | 12   | 
| Lee Mar | down | 16   | 
| Al Gov | up | 14   | 
| Al Gov | down | 13   | 
| Al Gov | side | 13   | 
+-----------+------------+--------+ 

はそうのような各ユーザーのデータを集約することです。

+-----------+------------+--------+ 
| user_info | up | down | side 
+-----------+------------+--------+ 
| Ben Cho | 12 | 0 | 0  | 
| Lee Mar | 21 | 16 | 12 | 
| Al Gov | 14 | 13 | 13 | 
+-----------+------------+--------+ 

これをmySqlでどのように達成できますか?

ありがとうございました!

+0

これは 'group_concat'では達成されません。私が理解しているように、ピボット操作をしています。私は、MySQLでそれを自動的に行う方法があるかどうかはわかりません。あなたもマニュアルを読むことができます(そして私は調べるために持っていなければなりません)。 –

+0

します。素早い応答のためにありがとう@JonathanLeffler –

答えて

0

私が知る限り、条件付き集計が必要です。 group_concat()

select (case when user_name IS NULL or user_name = '' then distinct_id else user_name 
     end) as user_info, 
     sum(mp.event = ('app_open')) as num_app_open, 
     sum(mp.event = ('post_created')) as num_post_created, 
     sum(mp.event = ('create_comment')) as num_create_comment 
from mixpanel mp 
where mp.event in ('app_open', 'post_created', 'create_comment') and 
     class_id = '-KtmM9EACwDTR98a_yU9' 
group by user_info 
order by user_info desc; 
+0

その場で!ありがとうございました!これはまさに私が必要としたものでした!迅速な答えにもう一度感謝します。ありがとう@Gordon Linoff –

関連する問題