코딩 테스트에서 자주 나오는 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 |