SQL Abfrage alle Max finden ohne MAX-Funktion

Liberty-son

Mitglied
Hallo,

ich lerne gerade für eine Datenbankklausur und hab so ein paar kleine Probleme. Wir dürfen die Funktionen MAX, MIN nicht nutzen aber wir sollen MAX und MIN raus suchen. Hierbei ist zu beachten, dass es auch mehrere MAX und MIN geben kann und diese dann alle ausgegeben werden sollen. Als Beispiel: Welches Auto ist das schnellste und es gibt 3 (vorher nicht bekannt wieviele es gibt) Autos mit 300km/h. Somit sollen alle 3 ausgegeben werden.
Ich hoffe, man versteht mein Problem.

Vielen Dank für eure Hilfe
 
Hallo,

das Maximum kannst du ermitteln, indem du die entsprechende Spalte selektierst, in absteigender Reihenfolge sortierst und dir dann nur die erste Zeile des Ergebnisses anschaust. Anschließend musst du nur noch alle Zeilen selektieren, in denen die entsprechende Spalte das Maximum annimmt.

Grüße,
Matthias
 
Hi,

habe in Mysql rumprobiert, da könnte man es so machen, allerdings muß die Anzahl der zu gruppierenden Werte klar sein:
Beipieldaten
a_kategorie,a_strecke
Kabel,10
Draht,11
Kabel,15
Draht,12
Kabel,8
Kabel,5
Kabel,3
Draht,1
SQL:
SELECT a_kategorie, a_strecke
FROM
( 
select a_kategorie, a_strecke 
from t_kabel
group by a_kategorie, a_strecke
order by a_strecke desc
) foo

LIMIT 0,2

Für Oracle nehme ich analytische funktionen

Aber mir fällt gerade ein das der UNION operator (den kennen ALLE Datenbanken) auch gehen müsste, leider ist es wichtig die Kategorien zu kennen.
SQL:
select *
from
(
		select a_kategorie, a_strecke 
		from t_kabel
		where a_kategorie = 'Kabel'
		group by a_kategorie, a_strecke
		order by a_strecke desc
		limit 1
)a
union
select *
from
(
		select a_kategorie, a_strecke 
		from t_kabel
		where a_kategorie = 'Draht'
		group by a_kategorie, a_strecke
		order by a_strecke desc
		limit 1
)b

Ich hoffe das hilft Dir erstmal
 
Zuletzt bearbeitet:
Hallo,
kannst du den task bitte schließen. Evtl. ist es auch Großzügig Deine Lösung hier einzustellen, ist ja ein Forum wo alle was von haben sollten oder?

Viele Grüße
 
Der Vollständigkeit halber hier noch die Lösung, an die ich gedacht hatte:
SQL:
SELECT f.Modell, f.Speed
FROM Auto f
WHERE f.Speed = (
  SELECT g.Speed
  FROM Auto g
  ORDER BY g.Speed DESC
  LIMIT 1
)
Sie sollte in der Regel schneller sein, da das Subquery unkorreliert ist.

Grüße,
Matthias
 
Zurück