/ / Création de colonnes par clause where - mysql, sql

Création de colonnes selon la clause where - mysql, sql

Est-il possible de construire une requête pour créer plusieurs colonnes en fonction de plusieurs conditions et les regrouper par heure. Par exemple, un tableau simple comme celui-ci:

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

Je peux obtenir toutes les valeurs entre 10 et 20 par semaine de l'année comme suit:

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)

Cela me donnera par exemple:

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

Je pourrais répéter la requête pour les gammes 20-30,30-40, 40-50 et manuel joignent les sorties, mais j’aimerais une seule requête combinant celles-ci dans une table, donc la sortie serait:

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

Réponses:

1 pour la réponse № 1

Vous pouvez utiliser SUM au lieu de COUNT, avec un IF entre les crochets de la somme

Quelque chose comme ça

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)

Notez qu'il existe un problème ici (et dans votre code d'origine) pour les éléments dont la valeur se trouve sur la bordure (par exemple, si 20).

Flexibilité sage vous seriez probablement mieuxavec une autre table qui stocke les plages, joignez-vous à cela pour obtenir une ligne par plage par semaine / année, puis convertissez les lignes en colonnes dans votre script. Enregistre en modifiant le code quand une plage est ajoutée.