📖 Aggregate Functions
🌟 집계함수
- 여러 칼럼 혹은 테이블 전체 칼럼으로부터 하나의 결과값을 반환하는 함수
| function | Description |
|---|
COUNT | 총 갯수를 계산해주는 함수 |
SUM | 합계를 계산해 주는 함수 |
AVG | 평균을 계산해 주는 함수 |
MIN | 가장 작은 값을 찾아주는 함수 |
MAX | 가장 큰 값을 찾아주는 함수 |
FIRST | 첫번째 결과값을 리턴해주는 함수 |
LAST | 마지막 결과값을 리턴해주는 함수 |
📖 COUNT & SUM
🌟 COUNT
SELECT COUNT(column)
FROM tablename
WHERE condition;
🌟 SUM
SELECT SUM(column)
FROM tablename
WHERE condition;
실습
💭 COUNT
- police_station 테이블에서 데이터는 모두 몇 개?
mysql> select count(*) from police_Station;
+
| count(*) |
+
| 31 |
+
- crime_status 테이블에서 경찰서는 총 몇 군데?
mysql> select count(distinct police_station) from crime_status;
+
| count(distinct police_station) |
+
| 31 |
+
1 row in set (0.00 sec)
💭 SUM
mysql> select sum(case_number)
-> from crime_Status
-> where status_type = '발생' and crime_type like '살인';
+
| sum(case_number) |
+
| 141 |
+
1 row in set (0.00 sec)
mysql> select sum(case_number)
-> from crime_status
-> where status_type='검거'
-> and police_station = '중부';
+
| sum(case_number) |
+
| 1406 |
+
📖 AVG & MIN & MAX
🌟 AVG
SELECT AVG(column)
FROM tablename
WHERE condition;
🌟 MIN
SELECT MIN(column)
FROM tablename
WHERE condition;
🌟 MAX
SELECT MAX(column)
FROM tablename
WHERE condition;
실습
💭 AVG
mysql> select avg(case_number)
-> from crime_status
-> where police_station ='중부' and status_type ='발생';
+
| avg(case_number) |
+
| 411.4000 |
+
1 row in set (0.00 sec)
💭 MIN
mysql> select min(case_number)
-> from crime_status
-> where crime_type='강도'and status_type ='발생';
+
| min(case_number) |
+
| 1 |
+
1 row in set (0.00 sec)
💭 MAX
mysql> select max(case_number)
-> from crime_status
-> where crime_type='살인'and status_type ='검거';
+
| max(case_number) |
+
| 12 |
+
1 row in set (0.00 sec)
📖 Group By & Having
🌟 Group By
SELECT column1, column2, ...
FROM table
WHERE condition
GROUP BY column1, column2, ...
ORDER BY column1, column2, ...;
🌟 Having
- 조건에 집계함수가 포함되는 경우 WHERE 대신 HAVING 사용
SELECT column1, column2, ...
FROM table
WHERE condition
GROUP BY column1, column2, ...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2, ...;
실습
💭 Group By
- 경찰서 종류를 검색 - DISTINCT 를 사용하는 경우
- ORDER BY 사용 X
mysql> select distinct police_station from crime_status limit 5;
+
| police_station |
+
| 중부 |
| 종로 |
| 남대문 |
| 서대문 |
| 혜화 |
+
5 rows in set (0.00 sec)
mysql> select police_station , sum(case_number) 발생건수
-> from crime_status
-> where status_type like '발생'
-> group by police_station
-> order by 발생건수 desc
-> limit 5;
+
| police_station | 발생건수 |
+
| 송파 | 5410 |
| 관악 | 5261 |
| 영등포 | 5217 |
| 강남 | 4754 |
| 강서 | 4415 |
+
5 rows in set (0.00 sec)
💭 Having
- 경찰서 별로 발생한 범죄 건수의 합이 4000 건보다 보다 큰 경우를 검색
mysql> select police_station ,sum(case_number) count
-> from crime_status
-> where status_type like '발생'
-> group by police_station
-> having count > 4000;
+
| police_station | count |
+
| 영등포 | 5217 |
| 강남 | 4754 |
| 관악 | 5261 |
| 강서 | 4415 |
| 구로 | 4175 |
| 송파 | 5410 |
+
6 rows in set (0.00 sec)