MySQL Aggregate Functions (집계함수) 3

dpwl·2024년 4월 10일
0

Data Analysis

목록 보기
24/83

8. GROUP BY

GROUP BY그룹화하여 데이터를 조회하는 함수이다.

GROUP BY 문법

SELECT column1, column2, ...
FROM table
WHERE condition
GROUP BY column1, column2, ...
ORDER BY column1, column2, ...;

Example 1: crime_status에서 경찰서 별로 그룹화하여 경찰서 이름을 조회하기

select police_station
from crime_status
group by police_station
order by police_station;

다음과 같이 DISTINCT를 써도 위와 결과값이 같다.
DISTINCT를 사용하여 경찰서 종류 검색

select distinct police_station
from crime_status;

하지만 DISTINCT 같은 경우 ORDER BY(정렬)를 사용할 수 없다.

Example 2: 경찰서 별로 총 발생 범죄 건수 검색하기

select police_station, sum(case_number) 발생건수
from crime_status
where status_type like '발생'
group by police_station
order by 발생건수 desc;

Example 3: 경찰서 별로 평균 범죄 검거 건수 검색하기

select police_station, avg(case_number) 평균검거건수
from crime_status
where status_type like '검거'
group by police_station
order by 평균검거건수 desc
limit 10;

Example 4: 경찰서 별 평균 범죄 발생건수와 평균 범죄 검거 건수 검색하기

select police_station, status_type, avg(case_number)
from crime_status
group by police_station, status_type
limit 10;

9. HAVING

조건에 집계함수가 포함되는 경우 WHERE 대신 HAVING을 사용한다.

HAVING 문법

SELECT column1, column2, ...
FROM table
WHERE condition
GROUP BY column1, column2, ...
HAVING condition (Aggregate Functions)
ORDER BY column1, column2, ...

Example 1: 경찰서 별로 발생한 범죄 건수의 합이 4000 건보다 큰 경우를 검색하기

select police_station, sum(case_number)from crime_status
where status_type like '발생'
group by police_station
having> 4000;

  • 확인해보자
select sum(case_number)
from crime_status
where police_station like '영등포' and status_type like '발생';

Example 2: 경찰서 별로 발생한 폭력과 절도의 범죄 건수 평균이 2000 이상인 경우를 검색하기

select police_station, avg(case_number) as 평균
from crime_status
where status_type like '발생'
	and (crime_type like '폭력' or crime_type like '절도')
group by police_station
having 평균 >= 2000;

  • 확인해보기 1
select avg(case_number) 
from crime_status 
where police_station like '영등포' and status_type like '발생'
	and (crime_type like '폭력' or crime_type like '절도'); 

  • 확인해보기 2
select * from crime_status
where (crime_type like '폭력' or crime_type like '절도')
	and status_type like '발생' and police_station like '영등포';

profile
거북선통통통통

0개의 댓글