🐬 SQL/✏️ 이론

✏️ 07. GROUP BY, HAVING

nyamin9 2023. 6. 25. 17:15

모바일은 화면을 돌려 가로화면으로 보시는 게 읽으시기 편할 수 있습니다. 돌려서 보시는 걸 추천드릴게요!! 

 

 

 


🐬 GROUP BY, HAVING

 

보통 데이터를 요약하거나, 어떤 통계량으로 나타낼 때 테이블 전체에 대한 집계를 하지는 않습니다.

오히려, 어떠한 열의 범주를 기준으로 이에 해당하는 행에 대해 요약하는 경우가 더욱 많습니다.

이때 사용하는 구문이 바로 GROUP BY 구문HAVING 구문입니다.

 

 


🐬GROUP BY

 

Products 테이블의 SupplierID 열을 기준으로 그룹화한 후, 각 그룹의 Price에 대해 평균을 계산하는 쿼리입니다.

GROUP BY 절을 통해 그룹화한 열이 반드시 SELECT 절 안에 포함되어 있어야 합니다!!

 

SELECT SupplierID, AVG(Price)
FROM Products
GROUP BY SupplierID;

 

 

 


 

또한 ,를 사용해서 GROUP BY 절의 기준에 두 가지 열을 사용할 수도 있습니다.

 

SELECT SupplierID, CategoryID, AVG(Price) 
FROM Products
GROUP BY SupplierID, CategoryID;

 

 

 


 

ORDER BY 절을 사용해서 결과를 오름차순/내림차순으로 정렬하는 것도 데이터 파악에 큰 도움이 됩니다!!

ORDER BY 절의 위치는 GROUP BY 절의 아래쪽입니다.

 

--내림차순정렬

SELECT SupplierID, CategoryID, AVG(Price) 
FROM Products
GROUP BY SupplierID, CategoryID
ORDER BY AVG(Price) DESC;

 

 

 


🐬HAVING

 

쿼리에 WHERE 절을 사용해서 조건을 만족하는 데이터만 추출할 수 있습니다.

이때 GROUP BY 절을 사용한다고 가정하면, 쿼리 작성 순서는 SELECT -> FROM -> WHERE -> GROUP BY 입니다.

 

하지만 GROUP BY 절과 WHERE 절을 함께 사용하면 쿼리 실행 순서에 따라 원하는 결과가 나오지 않을 가능성이 큽니다.

그 대신, GROUP BY 절을 사용할 때에는 HAVING 절을 뒤에 작성해 조건문을 만들어 줍니다.

 

SELECT SupplierID, CategoryID, AVG(Price)
FROM Products
GROUP BY SupplierID, CategoryID
HAVING AVG(Price) >= 100  


/*
SELECT SupplierID, CategoryID, AVG(Price) AS avg_price
FROM Products
GROUP BY SupplierID, CategoryID
HAVING avg_price >= 100  
*/

 

 

 


 

'🐬 SQL > ✏️ 이론' 카테고리의 다른 글

✏️ 09. INNER JOIN  (0) 2023.06.27
✏️ 08. CASE  (0) 2023.06.25
✏️ 06. 집계함수  (0) 2023.06.25
✏️ 05. 데이터 순서 정렬하기  (0) 2023.06.12
✏️ 04. WHERE절 : LIKE 심화내용  (0) 2023.06.12