[SQL] Group by & Having

S:)·2023년 4월 8일
0

SQL

목록 보기
5/9

위의 문제를 풀다

1. 두 컬럼이 동일한 값을 조회 할 때

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 는 여러개로 걸 수 있다.


2. GROUP BY에 정의한 컬럼만 SELECT절에 그대로 사용

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;
profile
일단 저장

0개의 댓글

관련 채용 정보