SQL Befehl

monaco05

Grünschnabel
Hallo,

bin ein Neueinsteiger in Sachen SQL. Komme bei dieser Aufgabe einfach nicht weiter:

Liste die Liefermengeneinheit (d.h. 100, 200, .... 800), in der insgesamt die meisten Teile ausgeliefert wurden. (Hinweiß: Antwort ist 500.)

Zur Erklärung: Die Antwort ist 500, weil die Mengeneinheit 500 4x dabei ist und dadurch insgesamt 2000 Stück der Liefermengeneinheit 500 geliefert wurden.

Zum Vergleich: die Einheit 200 ist zwar 7x dabei, aber insgesamt eben dann nur 1400 geliefert worden

Laut Aufgabenstellung soll man das ganze mit dem ALL-Operator lösen!

Die Tabelle besteht aus einer Spalte (QTY) mit den entsprechenden Werten:

QTY

400
200
500
600
100
300
300
500
200
700
200
400
800
500
200
500
100
200
100
200
800
400
500

DBMS ist Oracle
 
Zuletzt bearbeitet:
Hi,

Ich versteh nicht wirklich was du für ein Problem hast. Etwas genauer solltest du es schon beschreiben. In deiner Tabelle sind eine Hand voll Kürzel von irgendwas, mit denen Keiner was anfangen kann ;)
Ach und:
Bitte verrat uns auch, welches DBMS du nutzt ;)
 
Hi,

ich denke ich habe die Problemstellung (nach Deinen Änderungen) begriffen, interessante Übung by the way.

Ich habe hier leider nur MySQL zum ausprobieren, es hat funktioniert mit folgendem Statement:
Code:
select ordqty.* from (
select grpqty.* from (
SELECT Sum(mv.qty) AS Sumqty, mv.qty 
FROM myvalues as mv
GROUP BY mv.qty ) as grpqty
order by grpqty.sumqty desc) as ordqty
limit 0,1

Übersetzt in Oracle müßte es also sein (wie gesagt, nicht überprüft, nur übersetzt):

Code:
select ordqty.* from (
select grpqty.* from (
SELECT Sum(mv.qty) AS Sumqty, mv.qty 
FROM myvalues as mv
GROUP BY mv.qty ) as grpqty
order by grpqty.sumqty desc) as ordqty
where rownum <=1

Damit erhältst Du in einer Zeile sowohl den Summenwert, dessen Maximum Du gesucht hast, als auch den Einzelmengenwert, dessen Summen verglichen werden sollten.

Zentrale Idee ist, nach den Summen zu gruppieren und dann den Maximalwert zu finden. Letzteres habe ich mit einer Absteigenden Sortierung nach den Summenwerten und der Selektion des ersten Datensatzes gemacht. Solltest Du aus einer Applikation in zB Java, PHP etc. diese Abfrage aufrufen, kannst Du die äußere Abfrage sparen (Performance !), und einfach nur den ersten Datensatz abgreifen.

Das Maximum kann man zwar auch mit einer max()-Abfrage finden, aber dann hast Du halt den Einzelwert 500 nicht dabeistehen - und das willst Du doch, wenn ichs verstanden habe.

Ich habe das ganze übrigens zunächst mit einer Distinct-Abfrage versucht, bin da aber nicht weitergekommen. Wenn jemand damit eine (elegantere ?) Lösung findet, würde mich interessieren.

Gruß
Oliver
 
Zurück