Oracle Beginner здесь пытается вернуть наиболее высокооплачиваемого сотрудника из каждого магазина.Можно ли вернуть этот результат, выполнив выражения INNER JOIN
ON MAX
/ SAL+COMM
и второй столбец (store_id
), формат которого аналогичен первому запросу ниже (объединение в два столбца)?Альтернативное решение возвращает результаты, которые мне нужны, но основаны исключительно на общей заработной плате, что позволяет получить посторонние результаты в большем наборе данных.
ENAME SAL COMM STORE_ID
KING 5000 - 3
BLAKE 2850 - 3
CLARK 2450 - 3
JONES 2975 - 1
SCOTT 3000 400 4
FORD 3000 0 4
SMITH 800 700 4
SELECT store_id, ename, (salary+NVL(commission,0)) total_pay
FROM employees E1
INNER JOIN
(SELECT store_id, MAX(sal+NVL(comm,0)) highest_paid
FROM employees
GROUP BY store_id) E2
ON E1.store_id = E2.store_id
AND total_pay = highest_paid
АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ
SELECT *
FROM EMPLOYEES
WHERE (SAL+NVL(COMM,0)) IN (SELECT MAX(SAL+NVL(COMM,0))
FROM EMPLOYEES
GROUP BY store_id)