테이블에서 여러 row의 calculation 또는 연산을 aggregates이라고 부른다.
SELECT COUNT(*)
FROM products
WHERE price < 5000;
가격이 5000 이하인 제품만 count해서 개수를 알려준다
SELECT SUM(reviews)
FROM products;
가장 작은, 그리고 큰 가격을 돌려준다
SELECT MAX(price)
FROM products;
SELECT MIN(price)
FROM products;
SELECT AVG(price)
FROM products;
ROUND는 두가지 값을 받는다
1. column 이름
2. decimal 자리수
SELECT ROUND(AVG(price), 2)
FROM products;
제품의 평균 가격대를 2자리 소수까지 반올림한다
SELECT AVG(price)
FROM products
WHERE category = 'espresso';
SELECT AVG(price)
FROM products
WHERE category = 'juice';
SELECT AVG(price)
FROM products
WHERE category = 'blended';
... 등등은 매우 비효율적이다!
다음과 같이 GROUP BY를 사용해 더 효율적으로 작성할 수 있다:
SELECT category,
AVG(price)
FROM products
GROUP BY category
ORDER BY category;
각 카테고리의 평균값을 카테고리로 정렬한다
SELECT category,
price,
AVG(reviews)
FROM products
GROUP BY 1, 2;
aggregate 함수는 각 그룹에 계산된다
예시
Employee라는 테이블이 있고, 거기에는 id, name, year_of_training, dep, sal 이라는 필드가 선언되어 있다. 우리는 Employee 테이블 속 각 부서의 가장 높은 연봉을 구하고 싶다 .
이 때SELECT Dep, MAX(sal) FROM Employee GROUP BY Dep
으로 구하면 우리는 각 부서의 최고 연봉을 볼 수 있다!
SELECT price,
ROUND(AVG(reviews)),
COUNT(*)
FROM products
GROUP BY price
HAVING COUNT(*) > 10;