Function | Description |
---|---|
COUNT | 총 갯수를 계산해주는 함수 |
SUM | 합계를 계산해주는 함수 |
AVG | 평균을 계산해주는 함수 |
MIN | 가장 작은 값을 찾아주는 함수 |
MAX | 가장 큰 값을 찾아주는 함수 |
FIRST | 첫번째 결과값을 리턴하는 함수 |
LAST | 마지막 결과값을 리턴하는 함수 |
SELECT COUNT(column)
FROM tablename
WHERE condition;
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 |
+--------------------------------+
crime_status 총 갯수
mysql> select count(distinct crime_status) from crime_status;
+------------------------------+
| count(distinct crime_status) |
+------------------------------+
| 6 |
+------------------------------+
SELECT SUM(column)
FROM tablename
WHERE condition;
범죄 총 발생 건수
mysql> select sum(case_number) from crime_status where status_type='발생';
+------------------+
| sum(case_number) |
+------------------+
| 92679 |
+------------------+
살인 총 발생 건수
mysql> select sum(case_number) from crime_status where status_type='발생' and crime_type like '살인';
+------------------+
| sum(case_number) |
+------------------+
| 141 |
+------------------+
중부 경찰서에서 검거된 총 범죄 건수
mysql> select sum(case_number) from crime_status where police_station='중부' and status_type='검거';
+------------------+
| sum(case_number) |
+------------------+
| 1406 |
+------------------+
SELECT AVG(column)
FROM tablename
WHERE condition;
평균 폭력 검거 건수
mysql> select avg(case_number) from crime_status where crime_type like '%폭력%' and status_type='검거';
+------------------+
| avg(case_number) |
+------------------+
| 1323.1935 |
+------------------+
중부경찰서 범죄 평균 발생 건수
mysql> select avg(case_number) from crime_status where police_station='중부' and status_type='발생';
+------------------+
| avg(case_number) |
+------------------+
| 411.4000 |
+------------------+
SELECT MIN(column)
FROM tablename
WHERE conditon;
강도 발생 건수가 가장 적은 경우 건수
mysql> select min(case_number) from crime_status where crime_type like '%강도%' and status_type='발생';
+------------------+
| min(case_number) |
+------------------+
| 1 |
+------------------+
중부경찰서에서 가장 낮은 검거 건수
mysql> select min(case_number) from crime_status where police_station='중부' and status_type='검거';
+------------------+
| min(case_number) |
+------------------+
| 1 |
+------------------+
SELECT MAX(column)
FROM tablename
WHERE condtion;
살인이 가장 많이 검거된 건수
mysql> select max(case_number) from crime_status where crime_type like '%살인%' and status_type = '검거';
+------------------+
| max(case_number) |
+------------------+
| 12 |
+------------------+
강남경찰서에서 가장 많이 발생한 범죄 건수
mysql> select max(case_number) from crime_status where police_station='강남' and status_type='발생';
+------------------+
| max(case_number) |
+------------------+
| 2283 |
+------------------+
SELECT column1, column2, ...
FROM table
WHERE condition
GROUP BY column1, column2, ...
ORDER BY column1, column2, ...;
crime_status에서 경찰서별로 그룹화하여 경찰서 이름을 조회
mysql> select police_station
-> from crime_status
-> group by police_station
-> order by police_station limit 5;
+----------------+
| police_station |
+----------------+
| 강남 |
| 강동 |
| 강북 |
| 강서 |
| 관악 |
+----------------+
❗ DISTINCT를 사용하는 경우 ORDER BY를 사용할 수 없음
경찰서별로 총 발생 범죄 건수를 검색
mysql> select police_station, sum(case_number) 발생건수
-> from crime_status
-> where status_type ='발생'
-> group by police_station
-> order by 발생건수 desc limit 10;
+----------------+--------------+
| police_station | 발생건수 |
+----------------+--------------+
| 송파 | 5410 |
| 관악 | 5261 |
| 영등포 | 5217 |
| 강남 | 4754 |
| 강서 | 4415 |
| 구로 | 4175 |
| 강동 | 3788 |
| 서초 | 3765 |
| 노원 | 3743 |
| 중랑 | 3726 |
+----------------+--------------+
경찰서별로 평균 범죄 검거 건수를 검색
mysql> select police_station, avg(case_number) 평균검거건수
-> from crime_status
-> where status_type='검거'
-> group by police_station
-> order by 평균검거건수 desc limit 10;
+----------------+--------------------+
| police_station | 평균검거건수 |
+----------------+--------------------+
| 관악 | 771.6000 |
| 송파 | 708.8000 |
| 강서 | 678.6000 |
| 강남 | 674.6000 |
| 영등포 | 674.2000 |
| 구로 | 596.8000 |
| 중랑 | 556.2000 |
| 강동 | 532.4000 |
| 노원 | 516.2000 |
| 마포 | 506.8000 |
+----------------+--------------------+
경찰서별 평균 범죄 발생 건수와 평균 범죄 건거 검수를 검색
mysql> select police_station, status_type, avg(case_number)
-> from crime_status
-> group by police_station, status_type limit 10;
+----------------+-------------+------------------+
| police_station | status_type | avg(case_number) |
+----------------+-------------+------------------+
| 중부 | 발생 | 411.4000 |
| 중부 | 검거 | 281.2000 |
| 종로 | 발생 | 338.8000 |
| 종로 | 검거 | 235.8000 |
| 남대문 | 발생 | 270.8000 |
| 남대문 | 검거 | 183.4000 |
| 서대문 | 발생 | 506.6000 |
| 서대문 | 검거 | 341.2000 |
| 혜화 | 발생 | 281.6000 |
| 혜화 | 검거 | 198.8000 |
+----------------+-------------+------------------+
SELECT column1, column2, ...
FROM tablename
WHERE condition
GROUP BY column1, column2, ...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2, ...
경찰서별로 발생한 범죄 건수의 합이 4000건보다 큰 경우를 탐색
mysql> select police_station, sum(case_number) count
-> from crime_status
-> where status_type = '발생'
-> group by police_station
-> having count > 4000;
+----------------+-------+
| police_station | count |
+----------------+-------+
| 영등포 | 5217 |
| 강남 | 4754 |
| 관악 | 5261 |
| 강서 | 4415 |
| 구로 | 4175 |
| 송파 | 5410 |
+----------------+-------+
경찰서별로 발생한 폭력과 절도의 범죄 건수 평균이 2000이상인 경우를 탐색
mysql> select police_station, avg(case_number) avg
-> from crime_status
-> where status_type='발생' and (crime_type like '%폭력%' or crime_type like '%절도%')
-> group by police_station
-> having avg > 2000;
+----------------+-----------+
| police_station | avg |
+----------------+-----------+
| 영등포 | 2444.5000 |
| 강남 | 2112.0000 |
| 관악 | 2421.5000 |
| 강서 | 2067.0000 |
| 송파 | 2552.0000 |
+----------------+-----------+