이번 문제는 조건에 따른 데이터의 수를 그룹별로 출력하는 문제였다.
여기서 막힘부분을 조건문을 WHERE로 써야하는지, HAVING으로 사용해야 하는지가 헷갈렸다. 이번 문제는 GROUP별 데이터를 구해야하므로 GROUP BY를 사용해야한다. 그래서 언제는 WHERE을 사용해야하고, 언제 HAVING을 사용해야 하는지를 알아보자.
차의 종류 별로 그룹을 나누기에 CROUP BY CAR_TYPE을 해주어야한다.
차의 수를 구해야하므로 COUNT(CAR_ID)를 조회해야한다.
※ 참고로 그룹함수는 GROUP BY문을 사용해도 다른 컬럼과 같이 조회가 가능하다.
여기가 가장 문제였는데 처음에는 GROUP BY가 나왔으니 조건을 HAVING을 걸어야한다고 생각했다. 그런데 답이 나오지 않아 이유를 생각해보니 여기서 조건은 GROUP을 지은 컬럼이 아닌 다른컬럼의 조건이기 때문에 WHERE을 걸어주어야한다는 결론이 나왔다.
SELECT CAR_TYPE, COUNT(CAR_ID) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%가죽시트%'
OR OPTIONS LIKE '%통풍시트%'
OR OPTIONS LIKE '%열선시트%'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;
GROUP BY 에서 조건을 사용해야하는 경우 그 조건이 GROUP의 대상 컬럼인지 아닌지를 확인하고, 대상 컬럼이면 HAVING을 아니면 WHERE을 사용하도록 하자.