MYSQL: Группировка строк по датам и внесение полей в имена столбцов

#mysql #group-by

#mysql #группировка по

Вопрос:

Иметь таблицу, подобную этой

 id   date         user   call_count
1    2020-09-15   Tim    4
2    2020-09-14   Tim    6
3    2020-09-04   Jamie  1
4    2020-09-02   Tim    2
5    2020-09-07   Tim    5
6    2020-09-01   Jamie  1
7    2020-09-01   Tim    5
8    2020-09-10   Jamie  4
9    2020-09-12   Tim    5
10   2020-09-22   Tim    44
11   2020-09-22   Tony   32
  

Я хотел бы иметь один запрос, который группирует по дате, помещая каждого пользователя в качестве имени столбца и отображая их количество на эту дату. Прямо сейчас я выполняю это с помощью нескольких циклов выбора, но это некрасиво и неэффективно.
Результат должен выглядеть так

 Date        Tim  Tony  Jamie
2020-09-22  44   32 
2020-09-15  4       
2020-09-14  6       
2020-09-12  5       
2020-09-10              4
2020-09-07  5       
2020-09-04              1
2020-09-02  2       
2020-09-01  5           1
  

Я довольно долго искал что-то подобное, но не нашел многого. Спасибо

Ответ №1:

Используйте условную агрегацию:

 SELECT
    Date,
    SUM(CASE WHEN user = 'Tim'   THEN call_count END) AS Tim,
    SUM(CASE WHEN user = 'Tony'  THEN call_count END) AS Tony,
    SUM(CASE WHEN user = 'Jamie' THEN call_count END) AS Jamie
FROM yourTable
GROUP BY
    Date
ORDER BY
    Date;