Unterabfrage mit Group by (avg und max)

kindlicherkaiser

Benutzer
Beiträge
10
Hallo liebe Forumgemeinde,

ich benötige eine Abfrage, die mir den höchsten Durchschnitt einer Gruppierung einzeigt.

Beispieldaten:
Fahrzeugtyp | gefahrene_KM
Auto1 10
Auto1 20
Auto2 2
Auto2 4
Auto3 1
Auto3 1

Die Ergebnisse würden also wie folgt sein:
Auto1 Summe 30 Durchschnitt 15
Auto2 Summe 6 Durchschnitt 3
Auto3 Summe 2 Durchschnitt 1

Der höchste Durchschnitt der Gruppierung wäre also:
Fahrzeugtyp Durchschnitt_KM
Auto1 15

Dieses Ergebnis benötige ich in einer SQL-Abfrage. Meine Versuche sind leider bisher kläglich gescheitert!

Mein Versuch, der allerdings alle drei Ergebnisse anzeigt. Ich benötige aber immer nur den maximalen Durchschnitt der Gruppierung in einer Zeile.
Select
Fahrzeugtyp,
avg(gefahrene_KM)
from
Tabelle1
Group by
Fahrzeugtyp

Ich stelle mir das irgenwie so vor, was leider nicht funktioniert.

select
fahrzeugtyp,
max(gefahrene_KM)
from
Tabelle1
group by
Fahrzeugtyp
having max(gefahrene_KM) = (select Fahrzeugtyp, avg(gefahrene_KM) from flugzeug group by herst)

Vielen lieben Dank für Eure Hilfe!
Euer kindlicherkaiser
 
Werbung:
Code:
test=*# select * from auto;
  typ  | km
-------+----
 auto1 | 10
 auto1 | 20
 auto2 |  2
 auto2 |  4
 auto3 |  1
 auto3 |  1
(6 Zeilen)

test=*# select typ, avg(km) from auto group by typ order by avg(km) desc limit 1;
  typ  |  avg   
-------+---------------------
 auto1 | 15.0000000000000000
(1 Zeile)
 
Hallo akretschmer,

vielen Dank für die schnelle Hilfe.

Da ich noch am lernen bin, möchte ich das ganze per Unterabfrage lösen.

D. h. die nachstehende Unterabfrage (als normale Abfrage ausgeführt) liefert mir eine gruppierte Ergebniszeile mit 3 Zeilen.
Ich möchte diese Unterabfrage in einen "normal" SELECT einbauen, der mir daraus nur den maximalen Wert des km Durchschnitts zeigt.

(select fahrzeugtyp, avg(gefahrene_KM) from tabelle1 group by fahrzeugtyp)

Besten Dank schonmal
kindlicherkaiser
 
Ja. Sortieren und Limitieren. Man muß es nicht absichtlich komplizierter machen als nötig, oder?

Aber weil Du es bist:

Code:
test=*# select max(avg) from (select typ, avg(km) from auto group by typ order by avg(km)) foo ;
  max   
---------------------
 15.0000000000000000
(1 Zeile)
 
...vielen Dank nochmal, bekomme ich leider nicht zum laufen.
...bin wie gesagt noch Anfänger

...müsste das nicht ungefähr so aussehen
select
typ,
max(km)
from
Auto
...und dann die Verbindung des außenstehenden Selects mit der Unterabfrage...nur wie?
(select typ, avg(km) from Auto group by typ order by avg(km))

Vielen lieben Dank für deine Bemühungen mir bei meiner Weisheit zu helfen :-)
kindlicherkaiser
 
Werbung:
in dem inneren select liefert avg(...) eine Spalte mit dem Namen avg. Im äußeren Select wirst Du also auf avg zugreifen müssen oder aber der Spalte einen Alias-Namen geben: select avg(km) as km. Dann kannst im äußeren Select wieder auf km zugreifen.
 
Zurück
Oben