Oracle - MAX von Summe

Jolle91

Grünschnabel
Hallo,

Ich Habe eine Tabelle Buchung, in der name,ort,flugnummer,datum,preis gespeichert werden und eine Tabelle Flug in der start,zielort,km,flugzeit und flugnummer gespeichert werden.

Jetzt habe ich die Summe der gebuchten KM von jedem Passagier anzeigen lassen und diese sortiert.


Name SUMME KM

Weber 16000
Maier 5000
Andi 700

mit

SQL:
select buchung.name,sum(flug.km) as "Summe KM" from flug,buchung where buchung.flugnummer=flug.flugnummer  group by buchung.name


Jetzt will ich aber den Passagier ausgeben, der die größte Summe von KM hat, also in unserem Fall Weber. Aber max(sum(flug.km)) geht wohl leider nicht.

Gibts da einen anderen Trick, oder einfach nur die erste Spalte anzeigen lassen ?


lg

Jolle
 
Zuletzt bearbeitet von einem Moderator:
Das ganez absteigend nach der km-Summe sortieren. Dann als Subquery verwenden und nur die erste Zeile auslesen
SQL:
SELECT
    dat.*
FROM
    (
        SELECT 
            buchung.name,
            SUM(flug.km) AS "Summe KM" 
        FROM 
            flug,
            buchung 
        WHERE 
            buchung.flugnummer = flug.flugnummer  
        GROUP BY 
            buchung.name
        ORDER BY
            SUM(flug.km) DESC    
    ) dat
WHERE
    dat.ROWNUM = 1
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

hier mal noch zwei alternativen:
SQL:
-- Variante 1: Mit analytischer Funktion row_number()
WITH 
  input AS ( 
    SELECT 'Weber' AS NAME ,16000 AS km FROM dual
    UNION ALL
    SELECT 'Maier' AS NAME, 5000 AS km FROM dual
    UNION ALL
    SELECT 'Andi' AS NAME, 700 AS km FROM dual
  ) 
  ,  ranked_input AS (
    SELECT 
        input.* 
      , row_number() OVER (ORDER BY km DESC) AS rn 
    FROM input
  )
SELECT 
   NAME
  ,km 
FROM 
   ranked_input 
WHERE 
   rn = 1
   
  ;
-- Variante 2: mit self join

WITH 
  input AS ( 
    SELECT 'Weber' AS NAME ,16000 AS km FROM dual
    UNION ALL
    SELECT 'Maier' AS NAME, 5000 AS km FROM dual
    UNION ALL
    SELECT 'Andi' AS NAME, 700 AS km FROM dual
  ) 
select a.* from input a left join input b on a.km < b.km where b.name is null

Gruß Tom
 

Neue Beiträge

Zurück