❇️ 요약
- Aggregate Functions(집계함수)
- COUNT / SUM
- AVG / MIN / MAX
- GROUP BY / HAVING
📖 Aggregate Functions(집계함수)
🔆 Aggregate Functions(집계함수)
- 여러 칼럼 혹은 테이블 전체 칼럼으로부터 하나의 결과값을 반환하는 함수
| Fuction | 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 - crime_status 테이블에서 경찰서는 총 몇군데?
mysql> SELECT COUNT(DISTINCT police_station)
-> FROM crime_status;
+
| COUNT(DISTINCT police_station) |
+
| 31 |
+
1 row in set (0.01 sec)
☁️ SUM - 중구 경찰서에서 검거된 총 범죄 건수는?
mysql> SELECT SUM(case_number)
-> FROM crime_status
-> WHERE police_station = '중부'
-> AND status_type = '검거';
+
| SUM(case_number) |
+
| 1406 |
+
1 row in set (0.01 sec)
📖 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 LIKE '중부'
-> AND status_type LIKE '발생';
+
| AVG(case_number) |
+
| 411.4000 |
+
1 row in set (0.01 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.01 sec)
☁️ MAX - 강남 경찰서에서 가장 많이 발생한 범죄 건수는?
mysql> SELECT MAX(case_number)
-> FROM crime_status
-> WHERE police_station LIKE '강남'
-> AND status_type LIKE '발생';
+
| MAX(case_number) |
+
| 2283 |
+
1 row in set (0.01 sec)
📖 GROUP BY / HAVING
이론
🔆 GROUP BY
SELECT column1, column2, ...
FROM tablename
WHERE condition
GROUP BY column1, column2, ...
ORDER BY column1, column2, ...;
🔆 HAVING
- 조건에 집계함수가 포함되는 경우
WHERE 대신 HAVING 사용
GROUP BY의 조건
SELECT column1, column2, ...
FROM tablename
WHERE condition
GROUP BY column1, column2, ...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2, ...;
실습
☁️ GROUP BY - 경찰서별 평균 범죄 발생 건수와 평균 범죄 검거 건수를 검색
mysql> SELECT police_station, status_type, AVG(case_number)
-> FROM crime_status
-> GROUP BY police_station, status_type
-> LIMIT 6;
+
| police_station | status_type | AVG(case_number) |
+
| 중부 | 발생 | 411.4000 |
| 중부 | 검거 | 281.2000 |
| 종로 | 발생 | 338.8000 |
| 종로 | 검거 | 235.8000 |
| 남대문 | 발생 | 270.8000 |
| 남대문 | 검거 | 183.4000 |
+
6 rows in set (0.01 sec)
☁️ HAVING - 경찰서 별로 폭력과 절도의 범죄 건수 평균이 2000 이상인 경우를 검색
mysql> SELECT police_station, AVG(case_number)
-> FROM crime_status
-> WHERE crime_type IN ('폭력', '절도')
-> AND status_type LIKE '발생'
-> GROUP BY police_station
-> HAVING AVG(case_number) > 2000;
+
| police_station | AVG(case_number) |
+
| 영등포 | 2444.5000 |
| 강남 | 2112.0000 |
| 관악 | 2421.5000 |
| 강서 | 2067.0000 |
| 송파 | 2552.0000 |
+
5 rows in set (0.01 sec)