우리가 데이터에서 궁금한 것.
통계 : 최대, 최소, 평균, 갯수
데이터 분석의 목적
쌓아있는 날 것의 데이터를 의미를 갖는 '정보'로 변환
where 절을 사용해서 수십개의 쿼리를 작성하는 것은 너무 비효율적
Group by를 이용하여 범주의 통계 가능
동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미
예를 들어 Group by를 이용하면
1) 같은 성씨의 데이터를 하나로 묶고
2) 각 성씨의 회원수를 구할 수 있음
select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;
select week, count(*) from checkins
group by week

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

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

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

*평균의 소수점을 표시하지 않거나 지정해 줄 때
round(avg(필드명),표시하고 싶은 자리수)로 한번 더 묶어주기
select week, round(avg(likes),0) from checkins
group by week;

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

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

쿼리가 실행되는 순서: from → group by → select
select name, count(*) from users
group by name;
데이터를 정렬해주는 것을 의미
두 가지로 사용 가능
select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명
group by 범주별로 세어주고 싶은 필드명;
order by 수치;
select name, count(*) from users
group by name
order by count(*)
select * from 테이블명
order by 정렬의 기준이 될 필드명;
select * from checkins
order by likes desc;
쿼리가 실행되는 순서: from → group by → select → order by
select name, count(*) from users
group by name
order by count(*);
*꿀팁* 이렇게 쿼리를 작성하면 편해요!
1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기
6) SQL 쿼리 작성하기!
쿼리가 점점 길어지면서 생기는 혼동을 최소화하고 원하는 이름으로 결과를 출력하기 위해 사용
select * from orders o
where o.course_title = '앱개발 종합반'
위의 쿼리에서 select * from orders o
orders에는 별칭 ' o ' 가 생김 -> order.course_title 이렇게 하지 않아도 o.course_title로 간편하게 지칭할 수 있음
select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method
select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method

[퀴즈1] 앱개발 종합반의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where course_title = '앱개발 종합반'
group by payment_method
[퀴즈2]Gmail 을 사용하는 성씨별 회원수 세어보기
select name, count(*) from users
where email like '%gmail.com'
group by name
[퀴즈3]course_id별 '오늘의 다짐'에 달린 평균 like 개수 구해보기
select course_id, avg(likes) from checkins
group by course_id
[숙제] 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders
where email like '%naver.com' and course_title = '앱개발 종합반'
GROUP by payment_method
