SQL : 15. Aggregate Functions(집계함수)

yeppi1802·2024년 6월 11일
0

❇️ 요약

  • Aggregate Functions(집계함수)
    • COUNT / SUM
    • AVG / MIN / MAX
  • GROUP BY / HAVING

📖 Aggregate Functions(집계함수)

🔆 Aggregate Functions(집계함수)

  • 여러 칼럼 혹은 테이블 전체 칼럼으로부터 하나의 결과값을 반환하는 함수
FuctionDescription
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)
profile
제로베이스 DA7 김예빈입니다.

0개의 댓글