๐ ๋ณธ ํฌ์คํ ์์ ์ฌ์ฉ๋๋ ํ ์ด๋ธ์ ์๋ฃ์ ์ถ์ฒ๋ Leetcode์์ ๋ฐํ๋๋ค. ๋ ๋ค์ํ SQL ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ ค๋ฉด Leetcode ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด ๋ณด์ธ์!
์ด๋ฒ ํฌ์คํ ์ Leetcode 176๋ฒ ๋ฌธ์ ์ธ 'Second Highest Salary' ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ค ํ๋ค. ๋ฌธ์ ์ ๋์ด๋๋ ๋น๊ต์ ์ด๋ ต์ง ์์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ํฌ์คํ ์ ๊ฒ์ํ๋ ์ด์ ๋ LIMIT ๊ณผ OFFSET ๋ฌธ๋ฒ์ ์ฌ์ฉ ์ ์ฃผ์ํด์ผ ํ ์ ์ ์๊ฐํ๊ธฐ ์ํจ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
1. ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ํ๊ธฐ!
์ฐ์ ๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒ์ ๋ฌธ์ ์ด๋ฆ์๋ ๋์ ์๋ฏ์ด 2๋ฒ์งธ๋ก ๊ฐ์ฅ ๋์ Salary๋ฅผ ์ถ๋ ฅํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๋ฌธ์ ์์ ์ฃผ์ด์ง ํ ์ด๋ธ ํํ๋ฅผ ์์ธํ ๋ค์ฌ๋ค๋ณด์.
2๋ฒ์งธ๋ก ๊ฐ์ฅ ๋์ Salary๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ ์ ์์ ๋ฐฉ๋ฒ์ "1๋ฒ์งธ๋ก ๊ฐ์ฅ ๋์ Salary๋ฅผ ์ ์ธํ์ ๋์ ๊ฐ์ฅ ๋์ Salary๊ฐ์ด 2๋ฒ์งธ๋ก ๊ฐ์ฅ ๋์ ๊ฐ์ผ ๊ฑฐ์์!" ๋ผ๋ ์์ด๋์ด์์ ์ถ๋ฐํ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ๊ฒ ๋๋ฉด ํ์ด๊ฐ ๋ค์๊ณผ ๊ฐ๋ค.
SELECT MAX(Salary) AS SecondHighestSalary
FROM Employee
WHERE Salary < (SELECT MAX(Salary)
FROM Employee)
2. LIMIT ๊ณผ OFFSET ํ์ฉํ๊ธฐ
ํ์๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ํ์ด๋ณธ ํ ์ผ๋ง์ ์ ๋ฐฐ์ด LIMIT๊ณผ OFFSET์ ํ์ฉํด์ ํ ์ ์์ง ์์๊น ์๊ฐํ๊ณ ์ค์ฒํด๋ณด์๋ค. ํ์ง๋ง ํด๋น ๋ฌธ์ ์ ๋ฐ๋ก์ ๋์ปฅ ๋งํ๋ฒ๋ ธ๋ค. ์ฐ์ LIMIT๊ณผ OFFSET์ ํ์ฉํ ํ์ด๋ฅผ ์ดํด๋ณด์.
-- LIMIT๋ง ์ฌ์ฉํ SQL ๊ตฌ๋ฌธ
SELECT Salary AS SecondHighestSalary
FROM Employee
ORDER BY Salary DESC
LIMIT 1, 1
-- LIMIT & OFFSET ๋ชจ๋ ํ์ฉํ SQL ๊ตฌ๋ฌธ
SELECT Salary AS SecondHighestSalary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
์ 2๊ฐ์ ํ์ด๋ ํด๋น ๋ฌธ์ ์ ํ ์คํธ ์ผ์ด์ค์๋ ์ฑ๊ณตํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๋ค๋ฅธ ํ ์คํธ ์ผ์ด์ค์๋ Null์ ๋ฐํํ์ง ๋ชปํ๋ค.
Id | Salary |
1 | 100 |
์ฆ, ์ ํ ์ด๋ธ ์ฒ๋ผ ์์ 2๋ฒ์งธ๋ก ๋์ Salary ๊ฐ์ด ์กด์ฌํ์ง ์์ ๋(Null ์ผ๋) LIMIT๊ณผ OFFSET์ ์ฌ์ฉํ ํ์ด๋ค์ Null์ ๋ฐํํ์ง ๋ชปํ๋ค.