私は各部門で2番目に高い給料を探しています。各部門で2番目に高い給与
スキーマ:
CREATE TABLE employees
(
ID int NOT NULL,
NAME char(50) NOT NULL,
departmentid int,
salary int
);
サンプルレコード:
/*departmentid =1 */
INSERT INTO employees VALUES (1, 'Max', 1, 90000);
INSERT INTO employees VALUES (2, 'Joe', 1, 70000);
INSERT INTO employees VALUES (3, 'Randy', 1, 70000);
/*departmentid =2 */
INSERT INTO employees VALUES (4, 'Henry', 2, 80000);
INSERT INTO employees VALUES (5, 'SAM', 2, 60000);
/*departmentid =3 */
INSERT INTO employees VALUES (6, 'Janet', 3, 69000);
マイクエリ:
SELECT departmentid,
NAME,
salary
FROM
(
SELECT
departmentid,
NAME,
salary,
Dense_rank()OVER (partition BY departmentid
ORDER BY salary DESC) AS Rank,
Count(1)OVER(partition BY departmentid) AS cnt
FROM
employees
)t
WHERE
t.rank = 2
OR (t.rank = 1
AND cnt = 1)
私は取得しています出力は以下の通りです。
departmentid NAME salary
1 Joe 70000
1 Randy 70000
2 SAM 60000
3 Janet 69000
私の予想出力はのDepartmentID = 3のためのレコードは1つだけであり、それはnullを返す必要があります
departmentid NAME salary
1 Joe 70000
1 Randy 70000
2 SAM 60000
3 NULL NULL
です。
このクエリで何が問題になっていますか?この結果を達成するための他の方法はありますか?
また、SQL fiddleも含まれています。
[なぜ私は非常に単純なSQLクエリであることを私には思える何のためにMCVEを提供する必要があります?]読みください(https://meta.stackoverflow.com/questions/ 333952/what-should-i-provide-an-mcve-for-what-like-to-a-very-simple-sql-query)を使用すると、あなたの質問にはあなたの質問*が含まれていて、あなたの実際の質問が見つかるはずの他の場所へのリンクではありません。 – AakashM