Problem
Example
Thinking
n๋ฒ์งธ ํฐ ๊ฐ์ ๋ณด๋ด๋ ๊ฒ์ด๋ผ ....
n๋ฒ์งธ ํฐ ๊ฐ์ด๋ฉด limit n์ผ๋ก ํด์ ์ ค ํฐ๊ฐ๋ถํฐ n๋ฒ์งธ ํฐ ๊ฐ๊น์ง n๊ฐ์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ค์์ ์ ์ผ ๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ๋๊ฒ ์ง? ์๊ฐํ๋ค
๊ทธ๋ฌ๋๋ wrong answer ์? null์ด ๋์์ผํ๋๋ฐ ๊ฐ์ด ๋์๋ฒ๋ ธ๋ค
ํ ..๊ทธ๋ฌ๋ฉด์ ์ฐ์ .. ๊ฐ๋ค์ด ์ค๋ณต๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋, distinct๋ก ์ค๋ณต์ ์ ๊ฑฐํด์ฃผ๊ณ
n๋ฒ์งธ ํฐ ๊ฐ์ด ์์ด์ผํ๋๋ฐ ๋์๋ฒ๋ฆฐ๊ฑฐ๋ฉด .. limit n ์ผ๋ก ๋์ด์ค ์ ๋ค์ด n๋ณด๋ค ์ ์ ๊ฒฝ์ฐ์ ๊ทธ๋ ๊ฒ ๋์ฌ ์ ์์ ๊ฒ์ด๋ค.
(์ : 100, 300, 200, 200 ์์ 4๋ฒ์งธ ํฐ ๊ฐ? ---distinct--> 400, 300, 200์ 4๋ฒ์งธ ํฐ ๊ฐ์ด ์๋ค. ๊ทธ๋ฌ๋ฉด ์กฐ๊ฑด์ ์ ๋ฃ์ด์ค์ผํ๋ค. CASE WHEN ~ ELSE ~ END๋ฅผ ์ฌ์ฉํด์ฃผ์!)
๊ทธ๋ฆฌ๊ณ ๋ญ๊ฐ ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ์์ ๋ฐฉ๋ฒ์ ์ฐพ์์ฃผ์๋ค.
limit 10, 10 ์ด๋ ๊ฒ ์ง์ ํด์ฃผ๋ฉด ํ ์ด๋ธ์ 11๋ฒ์งธ ํ๋ถํฐ 20๋ฒ์งธ ํ๊น์ง ๊ฐ์ ธ์จ๋ค๊ณ ํ๋ค.
๊ทธ๋ผ n๋ฒ์งธ ํ ๋จ ํ๋๋ง ๊ฐ์ง๊ณ ์ค๊ณ ์ถ์ผ๋ฉด limit n-1, 1 ์ด๋ ๊ฒ ํด์ฃผ๋ฉด ๋๊ฒ ๋ค ??? ๊ทผ๋ฐ ์ด๋ ๊ฒํด์ฃผ๋๊น syntax์๋ฌ๊ฐ ๋ฌ๋ค.
๊ทธ๋์ N์ N-1๋ก ์ง์ ํด์ฃผ๊ณ LIMIT N, 1๋ก ํด์ฃผ์๋ค! ์ฑ๊ณต!
๊ทธ๋ฌ๋๋ ๋ด๊ฐ ํ๋ ๋ฐฉ์๋ณด๋ค 50ms๋ ์ค์๋ค! ๋์ด์ค~
Solve
์ ์ถ ๋ต์
# 394 ms
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
SELECT CASE WHEN COUNT(a.salary) < N THEN null
ELSE MIN(a.salary)
END
FROM (
SELECT DISTINCT salary FROM Employee ORDER BY salary DESC
LIMIT N
) a
);
END
# 344 ms
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N = N - 1;
RETURN (
SELECT DISTINCT salary FROM Employee
ORDER BY salary DESC
LIMIT N, 1
);
END
https://leetcode.com/problems/nth-highest-salary
Nth Highest Salary - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
'๐ป leetcode > database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] Database | 178. Rank Scores (0) | 2022.03.16 |
---|---|
[LeetCode] Database | 176. Second Highest Salary (0) | 2022.01.18 |
[LeetCode] Database | 1179. Reformat Department Table (1) | 2022.01.13 |
[LeetCode] Database | 620. Not Boring Movies (0) | 2022.01.13 |
[LeetCode] Database | 596. Classes More Than 5 Students (0) | 2022.01.12 |