SQL 기초 2일차

전윤환·2022년 3월 8일
0

SQL왕초보

목록 보기
2/6
post-thumbnail

학습일자: 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(필드))는????

distinct가 있으나 없으나 count(필드)의 값이 출력된다.
괄호 안에 있는 함수가 먼저 적용되는 듯 하다.

=====================

2주차 SQL 시작

group by, order by -> 데이터를 묶어주는 방법

group 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

=====================

order by 학습

  1. name의 count 개수를 뽑기

  1. order by로 오름차순, 내림차순 정렬

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(*)

profile
코딩 연습장. 발전하고 싶습니다. 모든 방향에서의 비판 부탁드립니다.

0개의 댓글