[SQL] GROUP BY와 집계 함수를 사용할 때 주의할 점

2023. 8. 25. 01:52DATA PROGRAMMING/SQL

문제

위 문제는 집계함수를 활용해 여러 값들을 출력하는 문제인데, 주문 별로 GROUP BY한 이후 집계함수를 적용한다면 상품수의 평균은 count() 함수와 AVG()함수를 함께 사용해야 하고, 주문액합계의 평균은 SUM()과 AVG()함수를 함께 사용해야 한다. 이때, 하나의 테이블에서 두개의 집계함수를 모두 사용한다면, 에러가 발생한다.

 

 

WITH temp AS
(
    SELECT orderNo,count(quantity) '상품수', sum(priceEach * quantity) '주문액합계'
    FROM s_orderDetails
    GROUP BY orderNo 
)

SELECT count(orderNo) '주문수', AVG(상품수) '상품수의 평균', AVG(주문액합계) '주문액합계의 평균'
FROM temp;

이를 해결하기 위해 temp라는 임시테이블을 정의하고 그 테이블에서 일차적으로 집계함수를 적용해 구한 값들을 메인 테이블에서 다시 한 번 집계함수를 적용해 원하는 출력값들을 얻을수 있었다.