2016-06-30 6 views
1

Ich versuche, eine Abfrage in Oracle zu schreiben, die maximalen Wert zurückgibt. Ich habe 3 Tabellen Mitarbeiter, Kunden, Bestellungen.sql oracle max (summarum)

SELECT a.ID_Employee, a.NAME, a.SURNAME, SUM(c.value) AS "value" FROM Employee a, CUSTOMER b, ORDERS c WHERE a.ID_Employee = b.ID_Employee and b.ID_CUSTOMER = c.ID_CUSTOMER group by a.ID_Employee, a.NAME, a.SURNAME ; 

Das Ergebnis der Fragen:

id_Employess Name Surname Value 
7654   KENNETH MARTIN 27348 
7555   DANIEL PETERS 11060 
7820   PAUL ROSS 20796,8 
7844   MARY TURNER 58055,9 
7560   SARAH DUNCAN 36191,2 
7521   CYNTHIA WARD 9984,2 
7499   KEVIN ALLEN 7870,8 
7789   LIVIA WEST 32274,2 
7557   KAREN SHAW 33655,65 

Und ich brauche max-Wert aus diesem Ergebnis sein sollte:

id_Employess Name Surname Value 
7844   MARY TURNER 58055,9 

Antwort

1

nur verwenden rownum nach Bestellung von

select * from (
     select ID_Employee, NAME, SURNAME, value, rownum rn 
     from (
     SELECT a.ID_Employee, a.NAME, a.SURNAME, SUM(c.value) AS "value" 
      FROM Employee a, CUSTOMER b, ORDERS c 
     WHERE a.ID_Employee = b.ID_Employee and b.ID_CUSTOMER = c.ID_CUSTOMER 
     group by a.ID_Employee, a.NAME, a.SURNAME 
     order by 4 desc 
     ) 
    ) where rn = 1 
+0

Ich habe 1 Fragen zu Ihrer Antwort warum ? – Igorles

+0

'ORDER BY 4' bedeutet Reihenfolge nach der vierten Spalte in der SELECT-Klausel. Es ist also das gleiche wie 'ORDER BY value'. – MT0

0

diese Abfrage Könnte

select * 
from 
     (SELECT 
     a.ID_Employee 
     , a.NAME 
     , a.SURNAME 
     , SUM(c.value) AS "value" 
     FROM Employee a, CUSTOMER b, ORDERS c 
     WHERE a.ID_Employee = b.ID_Employee 
     and b.ID_CUSTOMER = c.ID_CUSTOMER 
     group by a.ID_Employee, a.NAME, a.SURNAME) 
where value = (SELECT SUM(c.value) 
     FROM Employee a, CUSTOMER b, ORDERS c 
     WHERE a.ID_Employee = b.ID_Employee 
     and b.ID_CUSTOMER = c.ID_CUSTOMER 
     group by a.ID_Employee, a.NAME, a.SURNAME);