TIL # 111 : [SQL] Aggregate Functions
Aggregate?
테이블에서 여러 row의 calculation 또는 연산을 aggregates이라고 부른다.
Important aggregates
- COUNT(): 특정 column row의 개수 세준다
- SUM(): 특정 column 속 값들의 합을 구한다
- MAX()/MIN(): 특정 column의 가장 큰, 작은 값을 구한다
- AVG(): 특정 column의 평균값을 구한다
- ROUND(): 특정 column의 값들을 반올림한다
COUNT
SELECT COUNT(*)
FROM products
WHERE price < 5000;
가격이 5000 이하인 제품만 count해서 개수를 알려준다
SUM
SELECT SUM(reviews)
FROM products;
MAX, MIN
가장 작은, 그리고 큰 가격을 돌려준다
SELECT MAX(price)
FROM products;
SELECT MIN(price)
FROM products;
AVG
SELECT AVG(price)
FROM products;
ROUND
ROUND는 두가지 값을 받는다
1. column 이름
2. decimal 자리수
SELECT ROUND(AVG(price), 2)
FROM products;
제품의 평균 가격대를 2자리 소수까지 반올림한다
GROUP BY
- SELECT, aggregate 함수와 함께 쓰이는 구문
- GROUP BY는 WHERE 구문 뒤에 나오지만, ORDER BY 또는 LIMIT 이전에 사용해야 한다
- 말 그대로 데잍를 그룹할 때 사용되는 구문이다
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;
각 카테고리의 평균값을 카테고리로 정렬한다
- column reference
선택한 첫번째 column : 1
선택한 두번째 column : 2
선택한 세번째 column : 3
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
으로 구하면 우리는 각 부서의 최고 연봉을 볼 수 있다!
HAVING
- 그룹을 필터하고 싶을 때 어떤 그룹을 넣을지 뺄지를 정할 수 있다
- aggregate 함수는 WHERE가 아닌 HAVING으로 필터해야 한다
- 왜? row를 필터하고싶지 않기 때문이다!
SELECT price,
ROUND(AVG(reviews)),
COUNT(*)
FROM products
GROUP BY price
HAVING COUNT(*) > 10;
- 우리는 각 price의 review 평균값, 그리고 개수를 product table에서 가져오고
- price으로 그룹이 되어있으며
- 그룹된 price 개수가 10개 이하인 항목들은 HAVING을 통해 거른다
Author And Source
이 문제에 관하여(TIL # 111 : [SQL] Aggregate Functions), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mjhuh263/TIL-111-SQL-Aggregate-Functions저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)