๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ’ป leetcode/database

[LeetCode] Database | 177. Nth Highest Salary

by ๋ฐ”์ฟ„๋ฆฌ 2022. 1. 18.

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