왜 이렇게 작성하면 안 될까?
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE, REST_ID, REST_NAME
ORDER BY FOOD_TYPE DESC;
*GROUP BY로 묶으면 가장 상단에 있는 데이터들을 임의로 가져옵니다. SELECT에 MAX를 해도 최대값을 가져오는것이 아닌 그룹화된 테이블 가장 상단을 가져오게 된다
https://school.programmers.co.kr/questions/38854
📌SQL 쿼리 실행순서
https://monawa.tistory.com/125
1.서브쿼리내용
SELECT FOOD_TYPE, MAX(FAVORITES) FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
2.정답
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
"WHERE (FOOD_TYPE, FAVORITES) IN" 부분은 음식 타입과 인기도가 특정 목록 안에 있는지를 확인하는 조건입니다. 만약 해당 목록에 포함되면 그 행이 선택됨
<오류>
SELECT FOOD_TYPE, REST_ID, REST_NAME, SUM(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE, REST_ID, REST_NAME --FOOD_TYPE만 쓰면 실행안됨
ORDER BY FOOD_TYPE DESC;
**SUM(FAVORITES)**과 같이 집계 함수를 사용하고 있습니다. 하지만 FOOD_TYPE, REST_ID, **REST_NAME**은 그룹화 기준이 아닌데, 이들 컬럼을 집계 함수 없이 그대로 SELECT 절에 사용하고 있기 때문에 오류가 발생합니다.
예를 들어, **FOOD_TYPE**을 그룹화 기준으로 사용하려면 REST_ID, REST_NAME 등의 컬럼은 집계 함수 없이 GROUP BY 절에 나열해야 합니다.
📌WHERE IN
주어진 목록 안에 있는 값과 일치하는 행을 선택하는데 사용
<예시1>
REST_ID REST_NAME CITY
---------------------------------
1 Restaurant A New York
2 Restaurant B Los Angeles
3 Restaurant C Chicago
4 Restaurant D New York
5 Restaurant E Houston
우리는 New York와 Los Angeles에 위치한 식당을 선택하고 싶다고 가정
SELECT * FROM RESTAURANTS
WHERE CITY IN ('New York', 'Los Angeles');
이 쿼리는 CITY 열의 값이 'New York' 또는 'Los Angeles'와 일치하는 행을 선택하게 됩니다. 따라서 위의 테이블에서는 **REST_ID**가 1, 2, 4인 식당들이 선택되어 결과로 나타날 것입니다.
<예시2: 고객 주문 중 특정 상품을 주문한 주문번호 조회>
주문(Order) 테이블:
OrderID CustomerID ProductID
1 | 101 | 201 |
2 | 102 | 202 |
3 | 103 | 201 |
4 | 101 | 203 |
상품(Product) 테이블:
ProductID ProductName
201 | ItemA |
202 | ItemB |
203 | ItemC |
이 경우, "ItemA"와 "ItemC" 상품을 주문한 주문번호를 조회하기 위한 SQL 쿼리
SELECT OrderID
FROM Orders
WHERE ProductID IN (
SELECT ProductID
FROM Products
WHERE ProductName IN ('ItemA', 'ItemC')
);
--WHERE ProductID IN (201,203) 이렇게 되서 조회되는 것
'DB > 쿼리 문제풀이' 카테고리의 다른 글
프로그래머스 ORACLE 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2023.10.06 |
---|---|
프로그래머스 ORACLE 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.10.06 |
프로그래머스 ORACLE 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.10.06 |
프로그래머스 ORACLE 성분으로 구분한 아이스크림 총 주문량 (0) | 2023.10.06 |
프로그래머스 ORACLE 가격대 별 상품 개수 구하기 (0) | 2023.10.06 |