AI SCHOOL/SQL

[SQL] GROUP BY, 집계함수

moru_xz 2023. 1. 20. 11:27

COUNT

count 함수는 해당 항목 레코드의 개수를 반환하는 함수

select count(id)
from `thelook_ecommerce.users`

select count(distinct city)
from `thelook_ecommerce.users`

중복 제거해서 카운팅도 가능

 

SUM

해당 항목 레코드의 합계를 반환하는 함수 

select sum(retail_price)
from `thelook_ecommerce.products`

AVG

해당 항목 레코드의 평균 반환하는 함수

select avg(cost)
from `thelook_ecommerce.products`;

 

 

MAX

해당 항목 레코드의 최대값을 반환하는 함수

select max(cost), max(retail_price)
from `thelook_ecommerce.products`;

MIN

해당 항목 레코드의 최소값을 반환하는 함수

select min(cost), min(retail_price)
from `thelook_ecommerce.products`;

VARIANCE

해당 항목 레코드의 분산을 반환하는 함수

select variance(retail_price)
from `thelook_ecommerce.products`

STDDEV

해당 항목 레코드의 표준편차를 반환하는 함수

select stddev(retail_price)
from `thelook_ecommerce.products`

 

GROUP BY

- 특정 항목을 기준으로 그룹화하여 조회할 수 있음

- 데이터를 그룹화 하여 조회할 때에는 그룹화 하려는 항목이 select에 들어가야 함

 

국가별 유저수

select country, count(id) 
from `thelook_ecommerce.users` 
group by country;

 

카테고리별 상품판매가 합계

select 
	category, 
	sum(retail_price) as sum_retail_price  
from `thelook_ecommerce.products` 
group by category

SQL 연습문제 4-1

회원(products) 테이블에서 전체 유저의 평균연령을 조회하세요.

SELECT AVG(age)
FROM `thelook_ecommerce.users`

SQL 연습문제 4-2

회원(products) 테이블에서 여성 유저의 평균연령을 조회하세요.

SELECT avg(age)
FROM `thelook_ecommerce.users`
where gender = 'F'

SQL 연습문제 4-3

회원(users) 테이블에서 국가별 가입자수를 조회하세요.

select country, count(id)as country_user_count
from `thelook_ecommerce.users`
group by country

SQL 연습문제 4-4

회원(users) 테이블에서 남성 유저의 국가별 가입자 수를 조회하세요.

select country, count(country) as country_user_count
from `thelook_ecommerce.users`
where gender = 'M'
group by country

SQL 연습문제 4-5

회원(users) 테이블에서 가입기간(created_at)이 2020년도 1월인 유저의 국가별 가입자 수를 조회하세요.

 select country, count(id) as country_user_count 
 from thelook_ecommerce.users 
 where created_at >= '2020-01-01' and created_at < '2020-02-01' 
 group by country;

SQL 연습문제 4-6

회원(users) 테이블에서 가입기간(created_at)이 2020년도 1월인 유저의 국가별 성별 가입자 수를 조회하세요.

 select country, gender, count(gender) as country_gender_user_count
 from thelook_ecommerce.users 
 where created_at >= '2020-01-01' and created_at < '2020-02-01' 
 group by country, gender;

SQL 연습문제 4 (도전)

SQL 연습문제 4-7

주문정보(orders) 테이블에서 2022년도의 주문 상태가 환불인 유저 아이디(user_id), 총 주문 아이템(num_of_item)의 개수를 조회하세요.

 select user_id, sum(num_of_item)
 from `thelook_ecommerce.orders`
 where status = 'Returned'
 and created_at >= '2022-01-01'
 and created_at < '2022-12-31'
 group by user_id;

프로그래머스 문제 4-2 (level 1)

SELECT MAX(PRICE) AS MAX_PRICE
FROM PRODUCT;
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

프로그래머스 문제 4-3 (level 2)

SELECT MIN(DATETIME) AS '시간'
FROM ANIMAL_INS
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

프로그래머스 문제 4-4 (level 2)

SELECT COUNT(ANIMAL_ID) AS COUNT
FROM ANIMAL_INS
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

프로그래머스 문제 4-5 (level 2)

SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

COUNT를 하면 NULL 값은 알아서 빠져서 굳이 WHERE NAME IS NOT NULL 할 필요 없음 


COUNT()와 COUNT(컬럼명) 차이
COUNT() : NULL값 포함 O
COUNT(컬럼명) : NULL값 포함 X