[엑셀보다 쉬운 SQL] 2주차 강의노트
Group by
- 동일한 범주를 갖는 데이터를 하나로 묶어서, 범주별 통계를 내주는 것
- 성씨별로 몇 명이 회원이 있는지 구하려고 where 절을 사용해서 수십개의 쿼리를 작성하는 것은 너무 비효율적 -> group by를 쓰자!
select * from users # *를 'name, count(*)로 변경
group by name
- 순서에 주의하자! from → group by → select
- from users: users 테이블에서 데이터를 불러온다
- group by name: name이라는 필드에서 동일한 값을 갖는 데이터를 하나로 합치기
- select name, count(): 이름과 count()를 출력해 주는데, 여기서 count(*)는 group by로 합쳐진 데이터의 개수를 세어주는 것
where 절을 사용할 때 실행 순서
- users 테이블 전체 불러오기
- users 테이블에서 '신' 씨를 가진 데이터만 불러와서 개수 살펴보기
- group by를 사용해서 '신'씨를 가진 데이터가 몇 개인지 살펴보기
group by 사용해보기
- select * from checkins limit 10 쿼리를 날려서 테이블 구조 확인하기
- 개수 구하기는 count(*) -> 이게 제일 많이 쓰임
- 최소값/최대값은 min/max(필드명)
- 평균은 avg(*)
- 이때, 소수점 두 자리만 남기고 반올림하고 싶으면 round(avg(*), 2)
- 범주별 통계 값의 합계는 sum(*)
Order by
- 깔끔한 정리, 정렬을 위해 쓰는 문법
- 디폴트 값은 오름차순
- 내림차순은 order by count(*) desc
- order by는 group by와 반드시 같이 다닐 필요는 없음
에러 미리보기
select * from orders
group by payment_method
-> 뭘 통계내라는지 안 말했기 때문에 payment_method 종류별로 하나씩 나옴
select count(*) from orders
group by payment_method
-> count 값만 나오고 범주값이 없게 나옴
select payment_method, count(*) from orders
group by payment_method # good!
연습하기
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' # 어떤 값이든 'gmail.com'으로 끝나는 row 구하기
group by name
3) course_id별 '오늘의 다짐'에 달린 평균 like 개수 구해보기
select course_id, round(avg(likes),2) from checkins
group by course_id
쿼리 작성 팁
1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기
6) SQL 쿼리 작성하기!
이외 유용한 문법 alias
- 별칭 붙이기
select * from orders o #orders를 o라는 별칭으로 부르다는 의미
where o.course_title = '앱개발 종합반'
select payment_method, count(*) as cnt from orders o
where o.course_title = '앱개발 종합반'
group by payment_method
-> 범주값이 count(*) 아니라 cnt로 출력됨
숙제
- 네이버 이메일을 사용하여 앱개발 종합반을 신청한 주문의 결제수단별 주문건수 세어보기
select payment_method, count(*) from orders o
where course_title = '앱개발 종합반' and email like '%naver.com'
group by payment_method
회고
KEEP | 해설 보기 전에 혼자 풀어보기 |
PROBLEM | 밀리면 앞에 배운 걸 까먹게 된다. where 절, like 함수 까먹어서 다시 복습해야 했다. |
TRY | 주차 넘어갈 때마다 앞에서 배운 것 한번씩 훑고 들어야겠다 |