/ / Створення стовпців за пропозицією where - mysql, sql

Створення стовпців для депозиції - mysql, sql

Чи можна побудувати запит для створення декількох стовпців на основі декількох умов і агрегувати за часом. Наприклад, проста таблиця така:

id value created
1  45    datetime
2  52    datetime
3  24    datetime
4  33    datetime
5  20    datetime

Я можу отримати всі значення від 10 до 20 за тиждень у році так:

SELECT count(*) as "10-20", week(created) as "week", year(created) as "year"
FROM table
WHERE value > 10 AND value < 20
GROUP BY year(created), week(created)

Це дасть мені, наприклад:

10-20 week year
40    1    2014
21    2    2014
3     33   2014

Я можу повторити запит для діапазонів 20-30,30-40, 40-50 і вручну приєднатися до виходів, але я хотів би, щоб окремі запити об'єднували їх у таблицю, тому вихідні дані будуть:

10-20 20-30 30-40 40-50 week year
40    0     33    42    1    2014
21    1     0     2     1    2014
0     0     32    0     12   2014
3     42    34    32    33   2014

Відповіді:

1 для відповіді № 1

Ви можете використовувати SUM замість COUNT, при цьому IF у дужках суми

Щось на зразок цього

SELECT SUM(IF(value > 10 AND value < 20), 1, 0) as "10-20",
SUM(IF(value > 20 AND value <  30), 1, 0) as "20-30",
SUM(IF(value > 30 AND value <  40), 1, 0) as "30-40",
SUM(IF(value > 40 AND value <  50), 1, 0) as "40-50",
week(created) as "week", year(created) as "year"
FROM table
WHERE
GROUP BY year(created), week(created)

Зауважте, що тут (і у вашому вихідному коді) існує проблема для елементів із значенням, що знаходиться на кордоні (наприклад, якщо 20).

Гнучкість мудрі ви б, мабуть, кращез іншою таблицею, в якій зберігаються діапазони, приєднатися до неї, щоб отримати один рядок на діапазон на тиждень / рік, а потім повернути рядки до стовпців сценарію. Зберігає внесення змін до коду, коли додається діапазон.