Einen Wertebereich zusammenfassen
Thomas
- datenbank
Guten Morgen,
ich habe eine Tabelle in der einige Attribute stehen die ich mit einer Abfrage gruppieren und anzeigen lasse.
Felder: hoehe, breite, staerke <-- anzahl
Ich möchte wissen welche hoehe - breite - stärke Kombination am häufigsten vorkommt. Da die breite aber sehr individuelle Eingaben enthält bekomme ich dementsprechend recht viele Datensätze als Ergebniss.
Jetzt würde ich gerne nach einem Wertebereich für die breite gruppieren lassen. Also zb. von 90 - 120 und alles was in diesem Bereich liegt wird zusammengefasst.
Ist das möglich?
Vielen Dank.
Grüße
Thomas
Hi!
Jetzt würde ich gerne nach einem Wertebereich für die breite gruppieren lassen. Also zb. von 90 - 120 und alles was in diesem Bereich liegt wird zusammengefasst.
Kannst du den Bereich mit einer Formel ausrechnen, so dass für jeden Bereich ein individueller Wert rauskommt? Beispielsweise kommen bei einer Ganzzahldivision konstante Werte bis zum nächsten Vielfachen des Teilers raus. Ansonsten kannst du mit einem CASE-WHEN-Konstrukt die Werte erzeugen: wenn 0..50 => 0, 50..70 => 1, 70..90 => 2, 90..120 => 3, usw.
Lo!
Hallo,
Ansonsten kannst du mit einem CASE-WHEN-Konstrukt die Werte erzeugen: wenn 0..50 => 0, 50..70 => 1, 70..90 => 2, 90..120 => 3, usw.
Super, danke dafür.
Hab es jetzt mit einem CASE-WHEN Konstrukt gelöst.
Soweit klappt das auch, nur kann ich nicht nach dieser erzeugten Alias Spalte gruppieren.
CASE
WHEN CAST(REPLACE(sbreite.wert,'.',',') AS numeric) > 0
AND CAST(REPLACE(sbreite.wert,'.',',') AS numeric) <= 100
THEN '0 - 100'
WHEN CAST(REPLACE(sbreite.wert,'.',',') AS numeric) > 100
AND CAST(REPLACE(sbreite.wert,'.',',') AS numeric) <= 150
THEN '100 - 150'
ELSE
'150 - x'
END AS breitebereich
Nach "breitebereich" kann ich nun nicht gruppieren. Er scheint diese nicht zu kennen.
Meldung: "Column (breitebereich) not found in any table in the query"
Welche Möglichkeiten habe ich?
Grüße
Thomas
Hi!
Soweit klappt das auch, nur kann ich nicht nach dieser erzeugten Alias Spalte gruppieren.
Ja, denn Gruppieren kommt vor dem Auswerten der SELECT-Klausel. Somit kann nicht nach berechneten Werten der SELECT-Klausel gruppiert werden. Du musst die CASE-WHEN-Formel in die GROUP BY-Klausel schreiben.
Lo!
Du musst die CASE-WHEN-Formel in die GROUP BY-Klausel schreiben.
Vielen Dank, so werde ich das jetzt machen. Bläht das ganze halt unnötig auf, da ich den Block jetzt im "Select" und im "Group By" hab.
Hab grad schon auf ein paar Seiten gelesen das es wohl die einzige Möglichkeit ist.
Grüße
Thomas
Du musst die CASE-WHEN-Formel in die GROUP BY-Klausel schreiben.
Vielen Dank, so werde ich das jetzt machen.
Habe gerade versucht den CASE Block in die Group By Klausel zu schreiben.
Das hat mir eine Fehlermeldung geworfen (Syntax Error)
In meinem Fall greife ich ja auf eine Informix DB zu.
Jetzt habe ich herausgefunden wie die Gruppierung nach der Spalte im Select möglich ist:
SELECT SUM( ... ) AS anzahl,
shoehe.wert AS shoehe,
sstaerke.wert AS sstaerke,
CASE
WHEN CAST(REPLACE(sbreite.wert,'.',',') AS numeric) > 0
AND CAST(REPLACE(sbreite.wert,'.',',') AS numeric) <= 100
THEN '0 - 100'
WHEN CAST(REPLACE(sbreite.wert,'.',',') AS numeric) > 100
AND CAST(REPLACE(sbreite.wert,'.',',') AS numeric) <= 150
THEN '100 - 150'
ELSE
'150 - x'
END AS breitebereich
FROM
...
GROUP BY shoehe.wert,
sstaerke.wert,
4
Man spricht die Spalte anhand der Nummer an. In diesem Beispiel ist mein Case Block die 4 Spalte, also spreche ich diese im Group By mit der "4" an.
Hoffe das hilft vielleicht mal jemanden weiter.
Grüße
Thomas
Hallo,
Hab es jetzt mit einem CASE-WHEN Konstrukt gelöst.
Nach "breitebereich" kann ich nun nicht gruppieren. Er scheint diese nicht zu kennen.
Meldung: "Column (breitebereich) not found in any table in the query"
welches Datenbankmanagementsystem verwendest Du? Welche Version?
MySQL erlaubt die Verwendung von Spaltenaliasnamen in der GROUP-BY-Klausel.
Freundliche Grüße
Vinzenz
welches Datenbankmanagementsystem verwendest Du? Welche Version?
MySQL erlaubt die Verwendung von Spaltenaliasnamen in der GROUP-BY-Klausel.
Entschuldigung, hatte ich vergessen zu erwähnen. Es ist eine Informix DB.
Ich habe mittlerweile schon ein paar Quellen dazu gefunden und gelesen und es ist in meinem Fall wohl nicht erlaubt Aliasnamen in Group By zu verwenden.
D.h. für mich ich muss den ganzen CASE Block nochmal in meine "Group By" Klausel setzen.
Danke.
Grüße
Thomas