티스토리 뷰

반응형

https://ko.khanacademy.org/computing/computer-programming/sql/sql-basics/pt/aggregating-data

 

집계함수의 사용

CREATE TABLE groceries (id INTEGER PRIMARY KEY, name TEXT, quantity INTEGER, aisle INTEGER);
INSERT INTO groceries VALUES (1, "Bananas", 4, 7);
INSERT INTO groceries VALUES(2, "Peanut Butter", 1, 2);
INSERT INTO groceries VALUES(3, "Dark Chocolate Bars", 2, 2);
INSERT INTO groceries VALUES(4, "Ice cream", 1, 12);
INSERT INTO groceries VALUES(5, "Cherries", 6, 2);
INSERT INTO groceries VALUES(6, "Chocolate syrup", 1, 4);

 

각 물건을 한개 이상 구매할 때가 생긴다.

 

만약에 계산을 하기 전에 전체의 개수가 맞는지 알고 싶다.

 

데이터 집계함수는 데이터 베이스의 최대 값이나 최소 값, 합, 평균을 구하는데 유용하다.

 

SELECT 집계함수(원하는 열의 이름) FROM 테이블명;

SELECT SUM(quantity) FROM groceries;

여기서는 SUM을 사용했다.

SUM(quantity)
21

 

주의할 점은 만약 위의 테이블 자체에서 '바나나의 개수'를 바꾼다면, 이 값 또한 실시간으로 바뀐다.

 

가장 많이 산 것의 개수 알고 싶다면?

MAX를 사용

 

 

GROUP BY

각 aisle에서 원하는 개수의 물건을 담았는지 알고 싶다.

 

그러면 GROUP BY를 이용한다.

SELECT SUM(quantity) FROM groceries GROUP BY aisle;
SUM(quantity)
9
1
56
1

 

그러면 전체를 더한 결과가 아니라, aisle 마다의 결과로 반환해준다.

그런데 어떤 aisle를 말하는지 모른다. aisle도 같이 보고 싶다면 어떻게 할까?

 

간단하다. aisle를 select 뒤에 넣어주면 된다.

SELECT aisle,SUM(quantity) FROM groceries GROUP BY aisle;
aisle	SUM(quantity)
2	9
4	1
7	56
12	1

 

만약에 aisle 대신 이름을 넣으면?

SELECT name, SUM(quantity) FROM groceries GROUP BY aisle;
name	SUM(quantity)
Cherries	9
Chocolate syrup	1
Bananas	56
Ice cream	1

각 aisle 에서의 첫번쨰 값을 출력해준다.

 

이러면 헷갈릴 수 있다. 따라서 그룹 안에서 갈라지는 값을 쓰는 건 GROUP BY를 쓸 때 좋지 않다.

반응형