Код, который вы разместили, не будет компилироваться; ему не хватает LAST_NAME
в GROUP BY
(что, по сути, неправильно, так как это сделает то, что вы делаете невозможным ) или - что еще лучше - удалите его из списка столбцов оператора SELECT
.
Используя функцию RANK
analyti c, вы получите
WITH data
AS ( SELECT country_name,
SUM (salary) sumsal,
RANK () OVER (ORDER BY SUM (salary) DESC) rn
FROM employees e
JOIN departments d ON (e.department_id = d.department_id)
JOIN locations L ON (d.location_id = L.location_id)
JOIN Countries Cc ON (L.country_id = Cc.country_id)
JOIN regions Rr ON (Cc.region_id = Rr.region_id)
GROUP BY country_name)
SELECT country_name, sumsal
FROM data
WHERE rn = 1;
У меня нет ни ваших таблиц, ни данных, поэтому - для иллюстрации - я ' Я буду использовать образец схемы Скотта. Упрощенно, это было бы так:
SQL> select deptno, sum(sal)
2 from emp
3 group by deptno
4 order by 2 desc;
DEPTNO SUM(SAL)
---------- ----------
10 13750 --> this is a department you need
20 10995
30 9400
Итак:
SQL> WITH data
2 AS ( SELECT deptno,
3 SUM (sal) sumsal,
4 RANK () OVER (ORDER BY SUM (sal) DESC) rn
5 FROM emp
6 GROUP BY deptno)
7 SELECT deptno, sumsal
8 FROM data
9 WHERE rn = 1;
DEPTNO SUMSAL
---------- ----------
10 13750
SQL>