SQL Abfrage min-max Werte von "Gruppen"

Teckler

Lt. Commander
Registriert
Mai 2020
Beiträge
1.358
Hallo zusammen,

bin am Erstellen einer Abfrage, aber den letzten Schritt bekomme ich nicht hin.
Wäre prima falls mir jemand auf die Sprünge helfen könnte.

Gundlagen:
MariaDB
Abfrage geht nur über eine Tabelle: meinetabelle

Code:
SELECT  distinct Form,concat(lo_w,'x',lo_l) as Weite,m_gruppe,m_dicke_von,m_dicke_bis
FROM   meinetabelle
where   Form='Langloch' order by lo_w asc,lo_l asc, m_gruppe asc, m_dicke_von asc ;

Ergebnis sieht so aus:
FormWeitem_gruppem_dicke_vonm_dicke_bis
Langloch5x1000,751,01
Langloch5x1001,021,25
Langloch5x1001,261,50
Langloch5x1001,512,00
Langloch5x1011,021,25
Langloch5x1011,261,50
usw

Ich will aber nur je eine Zeile der "m_gruppe" mit min- und max Werte angezeigt haben, so :

LanglochWeitem_gruppem_dicke_vonm_dicke_bis
Langloch5x1000,752,00
Langloch5x1011,023,00
usw


Min und max innerhalb der Abfrage (...,min(m_dicke_von),max(m_dicke_bis),..) funktioniert nicht.
Ist ja auch fast logisch.
Wie kann ich der Abfrage beibringen daß innerhalb der "Gruppe" m_gruppe die min-max Werte angezeigt werden ?

Problem hier, ich weiß zwar was ich will.
Finde aber keinen Treffer beim googeln weil ich den genauen Ausdruck der das bewirkt nicht kenne.

Danke schon mal
 
musst du nicht dann auch gruppieren wenn du eine Aggregatfunktion nutzen willst, oder vestehe ich dich falsch? Also group by usw.
Entweder dann mit Sub-SELECT oder du nutzt gleich Window Functions
 
  • Gefällt mir
Reaktionen: Teckler
Hättest mir ein Codebeispiel?
Ich glaub group hab ich auch schon probiert
Muss aber Morgen nochmal ran
Dachte die Lösung ist einfach, daher hab ich noch geschwind gefragt
 
Ist das ne Hausaufgabe?

Mit Subselect war das wohl gemeint:
select Form, Weite, m_gruppe, max(m_dicke_bis) as m_dicke_bis, min(m_dicke_von) as m_dicke_von from (SELECT distinct Form,concat(lo_w,'x',lo_l) as Weite,m_gruppe,m_dicke_von,m_dicke_bis FROM meinetabelle where Form='Langloch' ) base group by Form, Weite, m_gruppe

Eine Window Function fänd ich dafür auch nicht angebracht.
 
Man ist halt immer nur am Suchen....

Müsste das hier sein?
SELECT category,
MIN(price) AS min_price,
MAX(price) AS max_price
FROM cosmetics
GROUP BY category

Nein keine Hausaufgabe
Meisterschule hab ich schon 1990 abgeschlossen :D
 
  • Gefällt mir
Reaktionen: Oelepoeto und Jurial
Teckler schrieb:
Man ist halt immer nur am Suchen....

Müsste das hier sein?
SELECT category,
MIN(price) AS min_price,
MAX(price) AS max_price
FROM cosmetics
GROUP BY category

Nein keine Hausaufgabe
Meisterschule hab ich schon 1990 abgeschlossen :D
Aus meinem Skript:
"Gemäß ANSI-SQL sind Abfragen ungültig, bei denen nicht-aggregierte Attribute, die nicht in der GROUP BY-Klausel aufgeführt sind, trotzdem in der SELECT-, HAVING- oder ORDER BY-Klausel verwendet werden."

Wenn ich mich nicht irre, wäre es besser auch nach dem Preis zu gruppieren. MariaDB erlaubt standardmäßig aber auch solche Abfragen, wo nicht aggregierte Attribute selektiert werden. Dieses Verhalten lässt sich mit sql_mode = 'ONLY_FULL_GROUP_BY' de/aktivieren.


SELECT category, min_price, max_price
FROM cosmetics
GROUP BY category, MIN(price) as min_price, MAX(price) as max_price;
 
SELECT Form, Weite, m_gruppe, min(min_price) as m_dick_von, max(max_price) as m_dicke_bis
FROM meinetabelle
GROUP BY Form, Weite, m_gruppe;
 
Gibt es kein min oder max analog zu plsql als
Min(x) oder (Partition by weight)?
 
Zurück
Oben