2016-05-13 4 views
0

Следующий запрос дает мне year и month_num каждого билета поддержки.Поворот и подсчет строк в каждой ячейке?

SELECT STRFTIME_UTC_USEC(created_at, '%Y') AS year, 
    STRFTIME_UTC_USEC(created_at, '%m') AS month_num 
FROM zendesk.zendesk 

Я хочу, чтобы повернуть значения года и показать COUNT(*) все строки источника в каждой ячейке, например:

2014 2015 2016 
01  5  ...  ... 
02  8 
03 12 
04 22 
05 30 
06 15 
07 10 
08  9 
09 ... 
10 
11 
12 

Как я могу это сделать?

ответ

1

Вы можете использовать условную агрегацию:

SELECT STRFTIME_UTC_USEC(created_at, '%m') AS month_num, 
     SUM(CASE WHEN STRFTIME_UTC_USEC(created_at, '%Y') = '2014' then 1 else 0 end) as cnt_2014, 
     SUM(CASE WHEN STRFTIME_UTC_USEC(created_at, '%Y') = '2015' then 1 else 0 end) as cnt_2015, 
     SUM(CASE WHEN STRFTIME_UTC_USEC(created_at, '%Y') = '2016' then 1 else 0 end) as cnt_2016 
FROM zendesk.zendesk 
GROUP BY month_num; 
1
SELECT 
    month_num, 
    MIN(CASE WHEN [year] = '2014' THEN cnt END) AS year_2014, 
    MIN(CASE WHEN [year] = '2015' THEN cnt END) AS year_2015, 
    MIN(CASE WHEN [year] = '2016' THEN cnt END) AS year_2016 
FROM (
    SELECT 
    STRFTIME_UTC_USEC(created_at, '%Y') AS [year], 
    STRFTIME_UTC_USEC(created_at, '%m') AS month_num, 
    COUNT(*) AS cnt 
    FROM zendesk.zendesk 
    GROUP BY 1,2 
) 
GROUP BY 1 
Смежные вопросы