본문으로 바로가기

코딩 테스트에서 자주 나오는 SQL 문제이다.

 

SELECT a.ID AS PLACE_ID, a.NAME, COUNT(IFNULL(b.CNT, 0)) AS '개수'
FROM PLACES AS a LEFT OUTER JOIN PLACE_REVIEWS b
ON a.ID = b.PLACE_ID
ORDER BY a.ID

 

생각보다 간단해서 금방 해결될줄 알았지만....

데이터가 없는 경우 로우는 포함되지 않는 결과값이 나왔다.

 

 

null일 경우 0 처리를 하기 위해서는

SELECT a.ID AS PLACE_ID, a.NAME, IFNULL(b.CNT, 0) AS '개수'
FROM PLACES AS a LEFT OUTER JOIN (
    SELECT PLACE_ID, COUNT(*) AS CNT
    FROM PLACE_REVIEWS
    GROUP BY PLACE_ID
) AS b
ON a.ID = b.PLACE_ID
ORDER BY a.ID

서브 쿼리에서 COUNT를 구하는 작업을 선작업 후, 조인을 걸어야 된다.

그런 후 IFNULL 함수를 사용해서 0 처리를 하면 결과값이 잘 나온다.

 

 

참고 링크 : https://blogger.pe.kr/231

 

'데이터베이스' 카테고리의 다른 글

MySQL rank 함수  (0) 2020.08.04
ERD 관계 해석해보기  (0) 2019.06.16
식별관계, 비식별관계  (0) 2019.05.02
Mysql 5.7 이후 버전 비밀번호 변경 방법  (0) 2018.12.24
데이터베이스 릴레이션 키 정리  (0) 2018.11.30