Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Unterabfrage mit Group by (avg und max)

Dieses Thema im Forum "Oracle" wurde erstellt von kindlicherkaiser, 8 April 2017.

  1. kindlicherkaiser

    kindlicherkaiser Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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)
    
     
  3. kindlicherkaiser

    kindlicherkaiser Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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)
    
     
  5. kindlicherkaiser

    kindlicherkaiser Benutzer

    ...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
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden