[SQL] 15. Aggregate Functions

hhyun·2024년 6월 13일

[SQL]

목록 보기
16/20

📖 Aggregate Functions

🌟 집계함수

  • 여러 칼럼 혹은 테이블 전체 칼럼으로부터 하나의 결과값을 반환하는 함수
functionDescription
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)

0개의 댓글