데이터분석? 처음부터 한 걸음씩 - SQL #2

테리·2021년 8월 18일
1

SQL

목록 보기
2/6
post-thumbnail

범주의 통계를 내주는 Group by

Group by의 역할

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것
→ 그룹별로 묶을 때 Group by를 사용함.

Group by를 사용한 쿼리문

1) 동일한 범주의 개수 구하기

users 테이블에서 성씨별 회원수를 group by로 구한다면

select name, count(*) from users
group by name;

코드 작성 순서

  1. users에서 name을 같은 그룹별(동일한 값을 갖는 데이터들)로 묶는다.
select * from users group by name
  1. 아! 같은 그룹끼리 묶어졌으니 그렇게 묶어진 name 필드를 나타내고 숫자를 새서 출력해야지!
select name, count(*) from users
group by name;

★ name과 count를 출력해 주는데 여기서 count(*)는 group by로 합쳐진 데이터의 개수를 세어주는 것!

2) 동일한 범주에서 최솟값 구하기

min 사용

select 범주가 담긴 필드명, min(최솟값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명

ex) 주차별 likes의 최소값을 구해라

select week, min(likes) from checkins
group by week;

3) 동일한 범주에서 최대값

min 대신 max 사용

select 범주가 담긴 필드명, max(최대값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명

4) 동일한 범주의 평균

avg 사용

select 범주가 담긴 필드명, avg(평균값을 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명;
ex) select week, avg(likes) from checkins
group by week;

반올림을 하고 싶을 때 round를 사용
ex) 소수점 2자리까지만 표현하고 반올림하고 싶으면 round(avg(likes),2)

select week, round(avg(likes),2) from checkins
group by week;

5) 동일한 범주의 합계

sum 사용

select 범주가 담긴 필드명, sum(합계를 알고 싶은 필드명) from 테이블명
group by 범주가 담긴 필드명

정렬이 필요할 땐 order by(기본적으로 오름차순)

select name, count(*) from users
group by name
order by count(*)

→ 갯수(count(*)값)을 기준으로 정렬 하라는 뜻

내림차순으로 정렬하려면

select name, count(*) from users
group by name
order by count(*) desc

참고) oder by는 결과를 다 뽑고나서 맨 마지막에 하며, 모든 SQL 쿼리에 적용가능함

ex) like를 많이 받은 순서대로 내림차순으로 출력하면

select * from checkins
oder by likes desc;

★ where와 group by, order by 함께 사용해보기

Q. 웹개발 종합반의 결제수단별 주문건수 세어보기(오름 차순으로)

select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method 
order by count(*)

참고) oder by 문자열, 시간 기준으로도 정렬 가능하다

★ 쿼리작성 팁!!

1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기
6) SQL 쿼리 작성하기!

별칭 기능 : Alias

쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있다. 그래서 혼동을 최소화 하고 원하는 이름으로 결과를 출력하기 위해 SQL은 Alias라는 별칭 기능을 지원함.

1) 혼동을 막기위해 사용하는 예시

select * from orders o 
where o.course_title = '앱개발 종합반'

→ orders를 o라는 별칭으로 부를거야
→ course_title은 orders 테이블에 있는 course_title을 지칭하는거야

ex) select payment_method, count(*) from orders o
where o.course_title
group by payment_method

2) 원하는 이름으로 결과를 출력하는 예시
출력할 때 count(*) 대신 cnt로 출력하기 위해 as ant 사용

select payment_method, count(*) as cnt from orders o
where o.course_title
group by payment_method

profile
영화 좋아합니다

0개의 댓글