https://school.programmers.co.kr/learn/courses/30/lessons/131116
SELECT M.CATEGORY,
MAX_PRICE,
PRODUCT_NAME FROM FOOD_PRODUCT F
INNER JOIN (SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
GROUP BY CATEGORY) M
ON M.CATEGORY=F.CATEGORY AND M.MAX_PRICE=F.PRICE
ORDER BY MAX_PRICE DESC;
서브쿼리에서 카테고리 내에서 가장 큰 값을 갖는 데이터만 뽑고, 이를 본 테이블과 INNER JOIN(CATEGORY, PRICE가 동일한 경우)해 MAX_PRICE 값을 갖는 데이터만 조회했다.
SELECT CATEGORY,
PRICE AS MAX_PRICE,
PRODUCT_NAME
FROM FOOD_PRODUCT F
WHERE (CATEGORY, PRICE) IN (SELECT CATEGORY, MAX(PRICE) AS MAX_PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
GROUP BY CATEGORY)
ORDER BY MAX_PRICE DESC;
서브쿼리를 WHERE 절에 적용해 조건을 먹일 수 있다.
즉 서브쿼리에서 카테고리 내 가장 큰 값을 갖는 데이터의 카테고리와 PRICE를 뽑고, WHERE (CATEGORY, PRICE) IN 서브쿼리
로 MAX_PRICE를 갖는 데이터만 조회하기
이게 조금 더 깔끔한 것도 같다.
SELECT CATEGORY, PRICE
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자','국','김치','식용유')
GROUP BY CATEGORY
HAVING PRICE=MAX(PRICE)
HAVING에서 MAX를 먹이면 카테고리 내에서 MAX(PRICE) 값이 PRICE 값인 데이터만 뽑아져 나올 줄 알았는데, 그렇지 않고 그냥 WHERE 절 후 테이블에서 전체 PRICE 중 MAX 값으로 뽑혀서 하나의 데이터만 나온다.
HAVING이 GROUP BY 후 쓰는 WHERE로 알고있었는데 뭘 잘못하고있는거지?
SQL에서 커맨드가 실행되는 순서를 봐야겠다. 뭔가 잘못알고있는 게 있는겨