반응형
Table: Employee
+-------------+------+
| Column Name | Type |
+-------------+------+
| id | int |
| salary | int |
+-------------+------+
id is the primary key (column with unique values) for this table.
Each row of this table contains information about the salary of an employee.
Write a solution to find the second highest distinct salary from the Employee table. If there is no second highest salary, return null (return None in Pandas).
The result format is in the following example.
Example 1:
Input:
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
Output:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
Example 2:
Input:
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
+----+--------+
Output:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null |
+---------------------+
- id는 고유한 값이며, 각 직원의 급여 정보가 담겨 있습니다.
- 이 테이블에서 두 번째로 높은 급여를 구해야 합니다.
- 두 번째로 높은 급여가 없다면, null을 반환합니다.
이 문제는 DENSE_RANK() 윈도우 함수로 간단하게 해결할 수 있습니다. DENSE_RANK()는 같은 값에 동일한 순위를 부여하면서도 순위의 간격이 벌어지지 않는 특징이 있어 중복이 있는 경우에 특히 유용합니다.
SELECT MAX(salary) AS SecondHighestSalary
FROM (
SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rk
FROM Employee
) ranked
WHERE rk = 2;
- DENSE_RANK() OVER (ORDER BY salary DESC): 급여를 내림차순으로 정렬하고, 동일 급여에 동일한 순위를 부여합니다.
- WHERE rnk = 2: 두 번째로 높은 급여를 가진 행만 필터링합니다.
- MAX(salary): 만약 급여가 하나뿐이라면 이 필터는 결과를 반환하지 않기 때문에 null로 대체됩니다.
반응형
'Computer Science > SQL' 카테고리의 다른 글
SQL | LeetCode 1327. 특정 월 기준 주문량 분석하기 (0) | 2025.06.10 |
---|---|
SQL | LeetCode 1484. 날짜별로 팔린 제품들 정리하기 (GROUP BY + 정렬 + 문자열 조합) (3) | 2025.06.09 |
SQL | LeetCode 1667. 이름 포맷 통일하기 (CONCAT, UPPER, LOWER) (0) | 2025.06.07 |
SQL | LeetCode 185. DENSE_RANK()로 부서별 Top 3 급여자 구하기 (2) | 2025.06.06 |
SQL | LeetCode 585. 중복된 투자값 & 유일한 위치 조건 만족하는 투자 합계 구하기 (0) | 2025.06.05 |