how to use group_concat in my mysql

mysql sql contact

40 观看

1回复

3 作者的声誉

i have this query:

    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

and it gives me the following results:

+-----------+------------+--------+ 
| 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          |
+-----------+------------+--------+

what i need is to aggregate each user data like so:

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

how can i achieve this on mySql?

thank you!

作者: Lior Lasry 的来源 发布者: 2017 年 12 月 27 日

回应 1


0

865034 作者的声誉

决定

From what I can tell, you just want conditional aggregation. There is no need for 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;
作者: Gordon Linoff 发布者: 2017 年 12 月 27 日
32x32