SQL

SQL 2주차

sangwoo_rhie 2023. 5. 7. 08:08

통계: 최대 / 최소 / 평균 / 개수

 

👉 데이터 분석의 목적: 쌓여있는 날것의 데이터 → 의미를 갖는 '정보'로의 변환

 

  • 데이터베이스 테이블에 저장된 데이터: 쌓여있는 날것의 데이터
  • 가장 많은 Like를 받은 사람의 이름, 전체 신청자수, 평균 연령: 의미있는 '정보'

👉 더 나아가면? '범주 (category)' 각각의 정보가 궁금할 수 있습니다

 

  • 예) 과목별 신청자 평균 연령, 과목별 신청자수, 성씨별 회원수 등

 

1. 동일한 범주의 데이터를 묶어주는 Group by ('~별' 표현에 붙임)

 

동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것을 의미해요. Group by를 이용하면

1) 같은 성씨의 데이터를 하나로 묶고

2) 각 성씨의 회원수를 구할 수 있어요.

 

group by = 성씨 별, 결제수단 별, 주차 별 등등. (~별)

 

select 범주별로 세어주고 싶은 필드명, count(*) from 테이블명

group by 범주별로 세어주고 싶은 필드명;

 

select * from users    -> user 의 각 name별로 정리됨.

group by name*

 

 

select name, count (*) from users     -> name별로 각각의 숫자가 정리됨.

group by name

 

 

select * from checkins     -> checkins 의 각 week(주차)별로 정리됨.

group by week

 

select week, count(*) from checkins    ->주차 (week)별로 각각의 숫자가 정리

group by week

 

 

최솟값 min,   최댓값 max,   평균값 avg,   합계 sum

 

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

 

 

select week, min(likes) from checkins   -> 주차별로 likes를 받은 최솟값

group by week

 

select week, max(likes) from checkins    -> 주차별로 likes를 받은 최댓값

group by week

 

select week, avg(likes) from checkins    -> 평균값

group by week

 

select week, round(avg(likes),2) from checkins  -> 평균값은 소수점이 너무 길어지므로, 소수점2번째자리까지 표

group by week

 

select week, sum(likes) from checkins    -> 주차별 likes의 총 합계

group by week

 

2. 깔끔하게 데이터를 정렬해보자: Order by

 

select * from 테이블명 order by 정렬의 기준이 될 필드명;

 

select name, count(*) from users

group by name

 

 

select name, count(*) from users    ->  밑에 order by 쓰면 순서대로 정렬 (오름차순)

group by name

order by count(*)

 

select name, count(*) from users    ->  숫자 내림차순 정렬

group by name

order by count(*) desc

 

select payment_method, count(*) from orders   -> 결제수단별 숫자

group by payment_method

 

 

select payment_method, count(*) from orders    -> 웹개발종합반에서의 결제수단별 숫자

where course_title = '웹개발 종합반'

group by payment_method

 

 

select payment_method, count(*) from orders   ->  오름차순 정렬

where course_title = '웹개발 종합반'

group by payment_method

order by count(*)

 

 

 

select * from users   -> 이메일 abc순 정렬

order by email

 

select * from users

order by created_at

 

[퀴즈] 1. 앱개발 종합반의 결제수단별 주문건수 세어보기
[퀴즈] 2. Gmail 을 사용하는 성씨별 회원수 세어보기
[퀴즈] 3. course_id별 '오늘의 다짐'에 달린 평균 like 개수 구해보기

 

1. select payment_method, count(*) from orders

where course_title = '앱개발 종합반'

group by payment_method

 

2.  select name, count(*) from users

where email like '%gmail.com'

group by name

 

3.  select course_id, avg(likes) from checkins

order by course_id

 

별칭 기능: Alias

쿼리가 점점 길어지면서 종종 헷갈리는 일이 생길 수 있습니다. 그래서 SQL은 Alias라는 별칭 기능을 지원합니다.

 

select * from orders o                    -> o라는 별칭 사용

where o.course_title = '앱개발 종합반'

 

또는,

 

select payment_method, count(*) as cnt from orders o   -> as를 붙여서 별칭 cnt를만

where o.course_title = '앱개발 종합반'

group by payment_method

 

 

<퀴즈> 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기

 

select payment_method, count(*) from orders

where email like '%naver.com' and course_title = '앱개발 종합반'

group by payment_method