2017-03-14 4 views
0

Sagen wir, ich habe eine Tabelle mit PRICE und ITEMS_COUNT und die Tabelle sieht wie folgt aus:Gruppe von Bereichen in SQL

price items_count 
----- ----------- 
1.50  10 
2.25  11 
4.13  20 
..  .. 

Gibt es eine Möglichkeit, eine Abfrage zu erstellen, die mir alle Elemente in einem festgelegten Bereich zeigt ? I.e. so etwas wie dies

range_price range_items_count 
----------- ----------------- 
1.00 - 1.50   0 
1.50 - 2.00   10 
2.00 - 2.50   11 
2.50 - 3.00   0 
    ...   ... 

Die erste Lösung, die ich sah, tatsächlich jedes einzelnen Bereich angeben würde, aber ich habe viele Einträge und ich würde 20 Schreiben am Ende nach unten, 30 Reihen von CASE s einfach zu haben, was Ich brauche.

Gibt es einen schnelleren Weg? Vielen Dank!

Edit: für jeden Bereich, der Minimalwert ist inklusive und der Maximalwert ist exklusiv und ich brauche nicht wirklich die Bereiche haben, wo der Wert 0.

+0

Verwenden Sie MySQL oder MariaDB? –

+0

ist der range_Price immer .50 und was sind die unteren und oberen Grenzen? oder sollten dies Parameter sein, die Sie angeben können? – xQbert

+0

@BerndBuffen Ich benutze MySQL – Astinog

Antwort

2

ist Wenn Sie die Bereiche von „Hälften wollen “können Sie tun:

select floor(price * 2)/2 as price_low, sum(items_count) 
from t 
group by floor(price * 2)/2; 

Eigentlich das Angebot bekommen erfordert einige Formatierung:

select concat_ws(' - ', 
       cast(floor(price * 2)/2 as decimal(5, 2)), 
       cast(0.5 + floor(price * 2)/2 as decimal(5, 2)) 
       ) as price_range, sum(items_count) 
from t 
group by floor(price * 2)/2; 

dass die meisten Ihrer Probleme löst. Die Anzahl von "0" zu bekommen ist ein großes Problem. Sie benötigen eine Liste aller Bereiche in der Ausgabe, um die fehlenden Zeilen zu erhalten.