초기 답안
SELECT
IFNULL(num, null) as num
FROM (
SELECT
num,
COUNT(num) as cnt
FROM
MyNumbers
GROUP BY
num
HAVING
cnt = 1
ORDER BY
num DESC
LIMIT
1
) as t
문제 상황
cnt = 0일 경우 null을 표시해야 했으나 아무것도 표시되지 않았다.
문제 원인
HAVING cnt = 1조건으로 인해 서브쿼리 결과가 빈 결과(0행)일 수 있다.- 0행이면
IFNULL은 적용할 대상이 없기 때문에 출력도 0행이 된다.
정답 코드
SELECT
MAX(num) as num
FROM (
SELECT
num,
COUNT(num) as cnt
FROM
MyNumbers
GROUP BY
num
HAVING
cnt = 1
ORDER BY
num DESC
LIMIT
1
) as t
MAX(num)은 집계함수로, 입력 행이 0개여도 행을 1개 반환한다.- 계산할 값이 없을 땐 반환하는 값이 NULL이 된다.
hanul.dev
데이터와 일상을 기록합니다
댓글 0
아직 댓글이 없습니다.