Использование столбца и совокупного результирующего набора для объединения двух запросов - PullRequest
0 голосов
/ 13 мая 2018

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)

1 Ответ

0 голосов
/ 13 мая 2018

Я не уверен, что вы ищете, но очень естественный способ выразить эту логику использует оконные функции:

SELECT storeid, empname, agg
FROM (SELECT e.*, (salary+ COALESCE(commission, 0)) AS agg,
             MAX(salary + COALESCE(commission, 0)) OVER (PARTITION BY storeid) as max_agg 
      FROM table.employees e
     ) e
WHERE agg = max_agg;
...