학습일자: 2022/03/08
재수강일: 2022/04/02
삼수강일: 2022/04/26
강의: 엑셀보다 쉬운 SQL
진도: 1-5 ~ 2-5
시작하자마자 신나는 문제타임
=====================
성이 남 씨인 유저의 이메일만 추출하기
select email from users
where name = '남**'
=====================
Gmail을 사용하는 2020/07/12~13에 가입한 유저를 추출하기
select * from users
where email like '%gmail.com'
and created_at between '2020-07-12' and '2020-07-14'
=====================
포함 조건
select * from 테이블
where 필드 in (x, y)
=====================
Gmail을 사용하는 2020/07/12~13에 가입한 유저의 수를 세기
select count(*) from users
where email like '%gmail.com'
and created_at between '2020-07-12' and '2020-07-14'
=====================
naver 이메일을 사용하면서, 웹개발 종합반을 신청했고 결제는 kakaopay로 이뤄진 주문데이터 추출하기
select * from orders
where email like '%naver.com'
and payment_method = 'kakaopay'
and course_title = '웹개발 종합반'
=====================
select 필드 from 테이블
where 필드 조건
and 필드 조건
and 필드 조건
필드 선술, 조건 후술
조건엔 in, between, like, =, >=, != 등등
limit n = n개만큼만 추출 (데이터베이스의 윗줄부터)
select count(필드) from 테이블 = 테이블 안의 필드의 개수
distinct(필드) = 중복제거(고유값만 보기)
count(distinct(필드)) = 필드의 중복을 제거 후 고유값이 몇개인지 확인
distinct가 있으나 없으나 count(필드)의 값이 출력된다.
괄호 안에 있는 함수가 먼저 적용되는 듯 하다.
=====================
group by, order by -> 데이터를 묶어주는 방법
select name, count(*) from users
group by name
users라는 테이블에서, name을 골라서, count를 하고
name 별로 묶어줌
그룹바이 안에 count를 쓰면 name의 그룹별로 묶이는 자료들의 개수를 셈
=====================
주차별 오늘의 다짐 개수 구하기
select week, count(comment) from checkins
group by week
group by = 엑셀에서 필터를 거는 컬럼
검증해보기
1주차 96개로 증명완료
=====================
주차별 '오늘의 다짐'의 좋아요 최솟값 구하기
select week, min(likes) from checkins
group by week
(먼저 풀어보고 강의 봤는데 맞았네 ㅎㅎㅎ^^)
=====================
주차별 '오늘의 다짐'의 좋아요 최댓값 구하기
select week, max(likes) from checkins
group by week
(최소값이 min이니까 최대값은 max가 맞다)
=====================
주차별 '오늘의 다짐'의 좋아요 평균값 구하기
select week, avg(likes) from checkins
group by week
(아...이거 정수로 어떻게 만들지?)
=====================
반올림하는법 바로 알려주네 이런 미친 스파르타코딩클럽...
내 머리속에서 나가!!
오늘만 벌써 2번째 이런 일을 겪었다(처음은 limit에서 조건거는거..)
select week, round(avg(likes), 0) from checkins
group by week
round(avg(필드), n) = avg(필드)가 소수일 경우, 소수를 n개까지 표현하는 반올림함수
=====================
주차별 '오늘의 다짐'의 좋아요 합계 구하기
select week, sum(likes) from checkins
group by week
=====================
select name, count() from users
group by name
order by count()
(order by count(*)) 뒤에 asc를 붙여줘도 되지만, 어차피 기본값이 오름차순이라 asc를 안붙임)
내림차순은?
select name, count() from users
group by name
order by count() desc
(desc를 써서 내림차순으로 정렬)
(오름차순은 asc지만, 기본값이 오름차순이기 때문에 안써도 됨)
=====================
※ 착각하지 말 것! order by는 group by와 별개의 기능으로, 아무때나 쓸 수 있다.
select * from checkins
order by likes DESC
=====================
실습 타임~~~
웹개발 종합반의 결제수단별 주문건수 세어보기
잠깐,
select * from orders
group by payment_method
어랍쇼? 여기서 distinct 같은 내용이? distinct(필드)와 다른점이라면 모든 컬럼이 다 보인다는 점인거 같은데... 일단 넘어가자
-> 와 이것도 다음강에서 알려주네 미쳤네 ㅋㅋㅋㅋ(2-4 같이삽질해보기 45초)
묶긴 묶었는데 뭘 통계내라고 지정을 안해서 걍 맨 위에 있는거만 대표적으로 보여줬다고 합니다.
select payment_method, count() from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count() DESC
order by = 필터를 걸고 해당 컬럼에 오름차순,내림차순 정렬시키는 기능
select payment_method, count(*) from orders // 컬럼을 지정해서 출력
where course_title = '웹개발 종합반' // course_title에 필터를 걸어서 해당값만 보이게
group by payment_method // payment_method를 기준으로 삼고(피벗의 행이나 열 같은 느낌...?)
order by count(*) DESC // count(*)의 데이터를 기준으로 내림차순 정렬
=====================
어.... 아직까진 쉽네.
근데 내가 궁금해할건 어떻게 알고 계속 묻지도 않은걸 알려주지?ㅋㅋㅋ
너무 재밌다... 8강 제한 열받는다...
*혼자해보기~
Q1) 가장 많은 성씨 상위 5개만 출력
select name, count(*) from users
group by name
order by count(*) desc
limit 5
Q2) 웹개발 종합반의 결제수단별 주문건수 높은순으로 정렬해서 출력하면서 맨 왼쪽 컬럼에 수강하는 강의 이름 띄워주기
select course_title, payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count(*)