Aggregate Functions(집계 함수)

정한별·2024년 6월 14일
0

📌 실습환경 만들기

1. AWS RDS (database-1) zerobase 에 접속 (명령 프롬프트 mysql에 접속)

> mysql -h 엔드포인트 -P  3306 -u admin -p zerobase 

2. police_station 데이터 확인

3. crime_status 데이터 확인

🗂️Aggregate Functions (집계함수)

여러 칼럼 혹은 테이블 전체 칼럼으로부터 하나의 결과값을 반환하는 함수

📁 COUNT

총 갯수를 계산해 주는 함수

🗒️ COUNT 예제 1

police_station 테이블에서 데이터는 모두 몇 개?

select count(*) from police_station; 

결과

📌 컬럼에 count(*)를 넣어주면 컬럼의 결과 값의 개수를 세어준다.

🗒️ COUNT 예제 2

crime_status 테이블에서 경찰서는 총 몇군데?

select count(distinct police_station) from crime_status; 

🗒️ COUNT 예제 3

crime_type 은 총 몇 가지?

select count(distinct crime_type) from crime_status;

📁 SUM

숫자 칼럼의 합계를 계산해주는 함수

🗒️ SUM 예제 1

범죄 총 발생건수는?

select sum(case_number) from crime_status where status_type='발생';

📁 AVG

숫자 칼럼의 평균을 계산해주는 함수

🗒️ AVG예제 1

평균 폭력 검거 건수는?

    -> select avg (case_number)
    -> from crime_status
    -> where crime_type like '폭력' and status_type ='검거';

    -> select *
    -> from crime_status
    -> where crime_type like '폭력' and status_type ='검거';
    ```

↪️ 해당되는 값의 리스트를 확인 가능

📁 MIN

숫자 칼럼 중 가장 작은 값을 찾아주는 함수

🗒️ MIN예제 1

강도 발생 건수가 가장 적은 경우 몇 건?

    -> select min(case_number)
    -> from crime_status
    -> where crime_type like '강도' and status_type='발생';

📁 MAX

숫자 칼럼 중 가장 큰 값을 찾아주는 함수

🗒️ MAX예제 1

살인이 가장 많이 검거된 건수는?

   -> SELECT max(case_number)
   -> FROM crime_status
   -> WHERE crime_type like '살인' and status_type like '검거';

🗒️예제 1

`` 서초경찰서의 범죄 별 평균 검거 건수를 검색하고 확인하세요 ```

    -> select avg(case_number)
    -> from crime_status
    -> where police_station like '서초' and status_type like '검거';

    -> select distinct
    -> *from crime_status
    -> where police_station like '서초' and status_type like '검거';

↪️ 해당되는 값의 리스트를 확인 가능

🗒️예제 2

구로경찰서와 도봉경찰서의 평균 살인 검거 건수를 검색하고 확인하세요.

    -> SELECT avg(case_number)
    -> from crime_status
    -> where ( police_station like '도봉' or  police_station like '구로') and
    -> crime_type like '살인' and  status_type like '검거';

📁 GROUP BY

그룹화하여 데이터를 조회

🗒️ GROUP BY 예제

경찰서 별로 총 발생 범죄 건수를 검색

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

📁 HAVING

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

🗒️ GROUP BY 예제

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

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

🗒️예제 1

'대문' 으로 끝나는 이름의 경찰서 별 범죄발생 건수의 평균이 500건 이상인 경우를 검색하세요.

    -> select police_station, avg(case_number)
    -> from crime_status
    -> where police_station like '%대문' and status_type like '발생'
    -> group by police_station
    -> having avg(case_number) >= 500;

       select distinct *
    -> from crime_status
    -> where police_station like '서대문' and status_type like '발생';


↪️ 확인가능

DISTINCT 를 사용하는 경우 (ORDER BY 를 사용할 수 없음)

🗒️예제

경찰서 별로 가장 적게 검거한 건수 중 4건보다 큰 경우를 건수가 큰 순으로 정렬하여 검색하세요.

    -> select police_station, min(case_number)
    -> from crime_status
    -> where status_type like '검거'
    -> group by police_station
    -> having min(case_number) >4
    -> order by min(case_number) desc;

    -> select min(case_number)
    -> from crime_status
    -> where status_type like '검거' and police_station like'중랑';


↪️ 확인 가능

0개의 댓글

관련 채용 정보