위의 문제를 풀다
Q) https://school.programmers.co.kr/learn/courses/30/lessons/131536
필요한 해당 두 컬럼을 GROUP BY로 묶고
여기서 HAVING 으로 GROUP BY 안에서 조건을 걸면 된다.
SELECT USER_ID , PRODUCT_ID
FROM ONLINE_SALE
GROUP BY PRODUCT_ID ,USER_ID
HAVING COUNT(*)> 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC
위와 같이 GROUP BY 는 여러개로 걸 수 있다.
Q) https://school.programmers.co.kr/learn/courses/30/lessons/59040
SELECT FOOD_TYPE , REST_ID , REST_NAME , FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
HAVING MAX(FAVORITES)
ORDER BY FOOD_TYPE DESC;
문제가 없어보이지만 , MySQL 에서만 임의로 처리하여 에러가 안나지만 , 다른 DBMS 에서는 에러가 발생한다.
문제점
GROUP BY에 정의한 컬럼만 SELECT절에서 그대로 사용 가능하고 , 정의되지 않은 컬름일 경우 집계함수로 처리 해야한다.
해결 방법
기존 테이블에서 최대치를 구하고 JOIN 하는 방식
SELECT R1.FOOD_TYPE,R1.REST_ID,R1.REST_NAME, R1.FAVORITES
FROM REST_INFO R1
INNER JOIN
(SELECT FOOD_TYPE , MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
HAVING MAX(FAVORITES)) R2
ON R1.FOOD_TYPE = R2.FOOD_TYPE AND R1.FAVORITES = R2.FAVORITES
ORDER BY FOOD_TYPE DESC;