문제
A single number is a number that appeared only once in the MyNumbers table.
Find the largest single number. If there is no single number, report null.
The result format is in the following example.
MyNumbers 테이블에서 한번만 나오는 수들 중에 가장 큰 수를 출력하기.
테이블 & 예제
[MyNumbers]
+-------------+------+
| Column Name | Type |
+-------------+------+
| num | int |
+-------------+------+
[Example]
Input:
MyNumbers table:
+-----+
| num |
+-----+
| 8 |
| 8 |
| 3 |
| 3 |
| 1 |
| 4 |
| 5 |
| 6 |
+-----+
Output:
+-----+
| num |
+-----+
| 6 |
+-----+
Input:
MyNumbers table:
+-----+
| num |
+-----+
| 8 |
| 8 |
| 7 |
| 7 |
| 3 |
| 3 |
| 3 |
+-----+
Output:
+------+
| num |
+------+
| null |
+------+
풀이
우선 한번만 나오는 수를 찾아야한다. 주의할 점은 조건에 맞는 수가 없다면 null을 반환해야한다는 점이다.
이를 위해 Having절에 대해서 조금 알아보았다.
HAVING 절을 사용하여 필터링된 결과에서 최대값을 찾을 때, 필터링 조건을 만족하는 행이 없으면 결과는 NULL이 반환됩니다. 이는 SQL의 표준 동작입니다. - GPT
이제 null에 대한 고민없이 조건을 걸 수 있다.
SELECT num
FROM MyNumbers
GROUP BY num
HAVING COUNT(num) = 1
그러나 문제가 발생한다. 당연하게 SELECT MAX(num)을 사용하면 될 줄 알았는데 생각한 것 처럼 적용되지 않는다.
그 이유는 다음과 같다.
HAVING 절은 그룹화된 결과 집합에 대한 조건을 지정하는 데 사용됩니다.
집계 함수 (MAX, MIN, SUM, COUNT 등)를 사용하여 그룹화된 데이터에 조건을 적용할 수 있습니다.
따라서 이 구문을 서브쿼리로 사용해서 결과를 도출하였다.
WITH c_nums AS (
SELECT num
FROM MyNumbers
GROUP BY num
HAVING COUNT(num) = 1
)
SELECT MAX(num) AS num
FROM c_nums
'코딩테스트 > SQL' 카테고리의 다른 글
SQL > LeetCode 1164. Product Price at a Given Date (MySQL) (0) | 2024.06.11 |
---|---|
SQL > LeetCode 180. Consecutive Numbers (MySQL) (0) | 2024.06.10 |
SQL > LeetCode 1070. Product Sales Analysis III (MySQL) (0) | 2024.06.06 |
SQL > LeetCode 550. Game Play Analysis IV (MySQL) (0) | 2024.06.04 |
SQL > LeetCode 1193. Monthly Transactions I (MySQL) (2) | 2024.06.02 |