SELECT last_name,
salary,
job_id
FROM (
SELECT last_name,
salary,
job_id,
RANK() OVER (PARTITION BY e.department_id ORDER BY salary) AS rnk
FROM employees e
INNER JOIN
departments d
ON (d.department_id = e.department_id)
INNER JOIN
locations l
ON (d.location_id = l.location_id)
WHERE e.job_id NOT IN ('AD_PRES', 'AD_VP')
AND l.country_id <> 'US'
)
WHERE rnk > 1;
出力:
LAST_NAME SALARY JOB_ID
------------------------- ---------- ----------
Hartstein 13000 MK_MAN
Banda 6200 SA_REP
Johnson 6200 SA_REP
Ande 6400 SA_REP
Lee 6800 SA_REP
Sewall 7000 SA_REP
Tuvault 7000 SA_REP
Marvins 7200 SA_REP
Bates 7300 SA_REP
Smith 7400 SA_REP
Cambrault 7500 SA_REP
Doran 7500 SA_REP
Smith 8000 SA_REP
Olsen 8000 SA_REP
Livingston 8400 SA_REP
Taylor 8600 SA_REP
Hutton 8800 SA_REP
Hall 9000 SA_REP
McEwen 9000 SA_REP
Sully 9500 SA_REP
Bernstein 9500 SA_REP
Greene 9500 SA_REP
Fox 9600 SA_REP
Bloom 10000 SA_REP
Tucker 10000 SA_REP
King 10000 SA_REP
Zlotkey 10500 SA_MAN
Vishney 10500 SA_REP
Cambrault 11000 SA_MAN
Abel 11000 SA_REP
Ozer 11500 SA_REP
Errazuriz 12000 SA_MAN
Partners 13500 SA_MAN
Russell 14000 SA_MAN
クエリ2 - 分析関数をを使用せず:
SELECT last_name,
salary,
job_id
FROM employees e
INNER JOIN
departments d
ON (d.department_id = e.department_id)
INNER JOIN
locations l
ON (d.location_id = l.location_id)
WHERE e.job_id NOT IN ('AD_PRES', 'AD_VP')
AND l.country_id <> 'US'
AND e.salary > ANY(SELECT salary
FROM employees ee
WHERE ee.department_id = e.department_id);
又は
AND e.salary > (SELECT MIN(salary)
FROM employees ee
WHERE ee.department_id = e.department_id);
出典
2016-06-20 23:47:27
MT0
DEPARTMENTS表とEMPLOYEES表には、わずか2 DEPARTMENT_ID – bp06km