2013-01-05 3 views
3

Possible en double:
In SQL, how can you “group by” in ranges?Sélectionner plusieurs valeurs de plage multiples

i ont la table comme ça

price 
id | prices 
1 | 3910 
2 | 4125 
3 | 3740 
4 | 2700 
5 | 1600 
6 | 2150 
7 | 2430 

ma sortie souhaité est comme ça

1500-1999 | 2000-2499 | 2500-2999 | 3000-3499 | 3500-3999 | 4000-4499 | allvalues 
-------------------------------------------------------------------------------------- 
    1  |  2  |  1  |  0  |  2  |  1  | 7 

expli:

  • 1500-1999 -> signifie que je veux compter les numéros qui sont entre 1500 et 1999 et ainsi de suite, avec les autres. Toutes les valeurs est de compter toutes les valeurs.

    * Voici le sql fiddle si quelqu'un doit le tester ici.

espérons que tout est clair, merci pour toute aide.

+0

http://stackoverflow.com/questions/232387/in-sql-how-can-you-group-by-in-ranges vous aidera probablement à. – slimdrive

+0

oui thx ça a l'air sympa et ça aide –

+0

La question liée est liée mais pour un format différent, avec des comptes comme une colonne et des plages comme une colonne - pas des colonnes par plage. –

Répondre

5

Il s'agit d'un type de pivot utilisant des plages. Le motif est le même pour une requête de pivotement à l'aide SUM(CASE...)

SELECT 
    SUM(CASE WHEN prices BETWEEN 1500 AND 1999 THEN 1 ELSE 0 END) AS `1500-1999`, 
    SUM(CASE WHEN prices BETWEEN 2000 AND 2499 THEN 1 ELSE 0 END) AS `2000-2499`, 
    SUM(CASE WHEN prices BETWEEN 2500 AND 2999 THEN 1 ELSE 0 END) AS `2500-2999`, 
    SUM(CASE WHEN prices BETWEEN 3000 AND 3499 THEN 1 ELSE 0 END) AS `3000-3499`, 
    SUM(CASE WHEN prices BETWEEN 3500 AND 3999 THEN 1 ELSE 0 END) AS `3500-3999`, 
    ... 
    COUNT(*) AS `All Values` 
FROM 
    prices 

Substitute le reste des gammes ... Le CASE produit un 0 ou 1 si la condition est adaptée et ceux qui sont ajoutés par les agrégats SUM() s.

http://sqlfiddle.com/#!2/5803e/10

+0

et toutes les valeurs, ce sera compte (*) non? –

+0

@ goodood Oui, désolé j'ai raté ça. –

+0

ok merci, bonne réponse –

Questions connexes