프로그래머스에서 SQL 문제를 풀다가 GROUP BY 사용시에 자주 까먹게 되는 주의점을 발견하였다.😂
https://school.programmers.co.kr/learn/courses/30/lessons/131123
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음에 별 생각 없이 다음과 같이 작성하였다. (틀린쿼리)
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES FROM REST_INFO GROUP BY FOOD_TYPE ORDER BY FOOD_TYPE DESC;
GROUP BY 로 묶으면 SELECT * FROM REST_INFO 했을 때 가장 상단에 있는 데이터들을 임의로 가져오기 때문에 문제에서 말하는 즐겨찾기수가 가장 많은 식당을 조회할 수 없다.
✅ 또한, GROUP BY 절을 사용할 때는 GROUP BY 절에 사용하지 않은 컬럼을 SELECT 절에서 사용하려면 집계함수(COUNT, SUM, AVG, MIN, MAX)로 어떤 값을 선택할지 명시해주어야 한다.
✅ GROUP BY에 사용된 컬럼 또는 집계 함수를 적용한 컬럼 외의 다른 컬럼도 조회하고 싶을 경우에는 서브 쿼리를 사용하면 된다.
따라서 이러한 이유로 다음과 같이 서브 쿼리를 이용해 즐겨찾기수가 가장 많은 식당의 음식 종류와 즐겨찾기 수를 먼저 구한 뒤, 이를 where절을 사용해 전체에서 필터링 해주면 조건에 맞는 결과를 얻을 수 있게 된다.
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN
(SELECT FOOD_TYPE, MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC;
'데이터베이스📑' 카테고리의 다른 글
SQL - DDL, DML, DCL, TCL (0) | 2023.12.15 |
---|---|
Inner Join, Outer Join (0) | 2023.12.14 |