2016-07-23 4 views
-1

Ich habe diese Tabelle:Mysql Abfrage mit mehr als einer Aggregatfunktion

EMPLOYEES(Code, Name, Surname, Type, Department, Salary) 

ich brauche, ohne eine Ansicht, die die Abteilung mit dem höchsten Gesamtaufwand für Gehälter anzuzeigen. Ist das möglich? Die Lösung mit Blick ist das:

CREATE VIEW DEPEXPENSES (DEPNAME, EXPENSE) AS 
SELECT DEPARTMENT, SUM(SALARY) 
FROM EMPLOYEES 
GROUP BY DEPARTMENT 

SELECT DEPNAME 
FROM DEPEXPENSES 
WHERE EXPENSE=(SELECT MAX(EXPENSE) FROM DEPEXENSES) 

Danke.

+2

Ihr Text sagt samething anderes als Ihr Code tut –

+0

Du hast Recht, ich Ich habe die Nachricht gerade editiert. – JamieITGirl

Antwort

1

Die Frage ist nicht zu klar, aber ich denke, dass Sie Ihre zweite Abfrage ausführen möchten, ohne eine Ansicht zu verwenden. Eine Lösung ist dies:

select 
    DEPARTMENT, 
    SUM(SALARY) 
from 
    EMPLOYEES 
group by 
    DEPARTMENT 
having 
    SUM(SALARY)=(
    select MAX(SALARY) from (
     select DEPARTMENT, SUM(SALARY) as SALARY 
     from EMPLOYEES 
     group by DEPARTMENT 
    ) s 
) 

(Sie max Aggregat-Funktion auf einer Unterabfrage anwenden können, die bereits eine aggregierte Funktion enthält)

+0

Sie haben Recht, ich habe meine Nachricht korrigiert. Ich weiß, dass einige DMBS eine Auswahl in der having-Klausel nicht erkennen, also muss ich einen anderen Weg finden (wenn es existiert!). Vielen Dank. – JamieITGirl