2014-10-29 2 views
0

У меня нет знаний с mysql. У меня есть несколько часов, пытаясь сценариев некоторых ответов, связанных с «concat group», для сводных строк в столбцах.pivot mysql doesnt't work

мой SQL:

select month(device_datetime) as month, 
      device_platform as platform, 
      count(*) as total 
    from devices 
    group by month(device_datetime), platform 
    order by month desc 

результат это то, что я хочу, но я хочу сделать столбцы платформы

month | platform | total 
    02 | windows | 10 
    02 | android | 08 
    03 | windows | 06 
    04 | Macintosh| 04 

Я хочу так:

month | windows | android | macintosh 
     02 | 10  | 08  | 0 
     03 | 06  | 0  | 0 
     04 | 0  | 0  | 04 

Спасибо , Я надеюсь, что вы можете помочь мне!

ответ

0

попробовать это (случай и если метод)

CASE METHOD 
     SELECT month(device_datetime) AS month, 
     SUM(CASE WHEN device_platform = 'windows' THEN 1 ELSE 0 END) AS windows, 
     SUM(CASE WHEN device_platform = 'android' THEN 1 ELSE 0 END) AS android, 
     SUM(CASE WHEN device_platform = 'Macintosh' THEN 1 ELSE 0 END) AS Macintosh 
     FROM devices 
     GROUP BY month(device_datetime) 
     ORDER BY month desc 


    IF METHOD 
     SELECT month(device_datetime) as month, 
     SUM(IF(device_platform= 'windows', 1, 0)) as windows , 
     SUM(IF(device_platform= 'android', 1, 0)) as android, 
     SUM(IF(device_platform= 'Macintosh', 1, 0)) as macintosh   
     FROM devices 
     GROUP BY month(device_datetime) 
     ORDER BY month desc 
2

Вы можете использовать условную сумму с оператором IF. Проверьте следующий запрос

 select month(device_datetime) as month, 
     SUM(IF(device_platform= 'windows', 1, 0)) as windows , 
     SUM(IF(device_platform= 'android', 1, 0)) as android, 
     SUM(IF(device_platform= 'Macintosh', 1, 0)) as macintosh   
     from devices 
     group by month(device_datetime) 
     order by month desc 
1

попробовать, как это

select month, 
     IF(device_platform= 'windows', total, 0) as windows , 
     IF(device_platform= 'android', total, 0) as android, 
     IF(device_platform= 'Macintosh', total, 0) as macintosh   
     from devices 
     group by month 
     order by month