Die Verwirrung in der Fehlermeldung tritt auf, weil Oracle verschachtelte Aggregationsfunktion unterstützt. Mit anderen Worten wird dieser (Nicht-Standard) Syntax erlaubt:
SELECT AVG(MAX(salary))
FROM employees
GROUP BY department_id;
Eine derartige verschachtelte Funktion entspricht:
SELECT AVG(maxsalary)
FROM (SELECT MAX(salary) as maxsalary
FROM employees
GROUP BY department_id
) e
Daher ist die Verschachtelung der sum()
s für sich allein kein Fehler - obwohl es in anderen Datenbanken wäre. Das Problem besteht darin, dass Ihre Abfrage Ebenen der Aggregation mischt. Daher wird die seltsame Fehlermeldung, die sich auf die Schlüssel bezieht, anstatt auf die Spalten aggregiert.
Wie in einem Kommentar erwähnt, brauchen Sie nicht verschachtelte Aggregationen:
select emp_firstname, emp_surname, sum(timesheet_hours),
sum(payroll_standard*grade_rate),
sum((payroll_overtime*grade_rate)*1.5),
(sum(payroll_standard*grade_rate) +
sum((payroll_overtime*grade_rate)*1.5)
),
sum(payroll_pension)
from funtom_employee join
funtom_payroll
on emp_id = payroll_emp join
funtom_timesheet
on timesheet_id = payroll_timesheet join
funtom_grade
on emp_grade = grade_id
where payroll_date between '1-Apr-2014' and '31-Mar-2015'
group by emp_firstname, emp_surname;
Das heißt, Ihre Version der Abfrage sowieso wahrscheinlich falsch ist. Wenn ein einzelner Mitarbeiter mehrere oder fehlende Zeilen in einer der Tabellen hat, sind die sum()
s wahrscheinlich ausgeschaltet. Ich würde zum Beispiel annehmen, dass Sie ein kartesisches Produkt für Arbeitszeittabellen und Gehaltslisten erhalten.
Wenn dies ein Problem ist, und Sie möchten hier helfen, fragen dann andere Frage und Beispieldaten und die gewünschten Ergebnisse umfassen.
Darüber hinaus lernen, Tabellen Aliase zu verwenden und Ihre Spaltennamen zu qualifizieren. Es hilft zu klären, woher die Spalten kommen.
Es gibt verschachtelte SUMs, was versuchen Sie zu erreichen? – dnoeth
Wenn ich eine SUMME (SUM()) versuchte, bekam ich "verschachtelte Gruppenfunktion ohne GROUP BY" –
Ich versuche, die Daten in der SELECT-Anweisung zurückzuziehen und SUM anwenden, um Gesamtwerte für diese Daten zu erhalten. Ich muss nur wissen, warum ich immer noch eine Gruppe Gruppenfunktion Fehler bekommen, obwohl ich nach dem, was ich ausgewählt habe gruppiert habe? –