[4주차]

이번 주차까지 다 하시면요
이제는 거의 왠만한 문법들은 다 다루셨다고 생각하시면 되고
이 문법들을 거의 조합해가지고
약간의 트릭이라든지
아니면 실전에서의 응용이라든지
이런 것들만 실력을 넓혀나가면 되는
그런 단계에 이를 겁니다 아셨죠



Subquery
여러분이 조금 더 쿼리문을 복잡하게 쓸 수 있게 하는 테크닉

배울 것
1. Subquery
2. Subquery를 좀 더 간결하게 보일 수 있도록 하는 with 구문에 대해서도 배울 거고요
3. 이 현실에서의 데이터는요 여러분 지저분하고 복잡합니다.
그래서 여기 현실에서의 데이터를 가공할 수 있는
그런 문자열들을 가지고 어떻게 가공할 수 있는지
문자열을 가지고 노는 법
4. 그 다음에 마지막으로 이 case when이라고 하는
조건문에 대해서도 배워보겠습니다.

여기까지 딱 배우시면
이제는 문법은 다 배우신 거예요


이제 분석 가능한 사람이다.


프로젝트
[[[[[[[[[[[with절 전까지했으면 프로젝트에 문제 없음]]]]]]]]]]]]
정보 올려줌
3,40메가
몇십만줄
실제데이터로생각하고분석

6시 반까지
어떤 가설을 가지고 분석을 할 겁니다
조장이 얘기

공부와 실제 프로젝트는 차이가 있다

30분 동안 이 테이블이 어떻게 생겼는지만 생각하기도 벅참



6시까지 데이터 보고

6시 반까지 가설세우고 발표
이런 데이터 분석해보면 어때요
저런 가설로 해보면 어때요

7시 반 최종 발표







courses
enrolleds
enrolleds_detail
enrolleds_homeworks
prequestions
rounds



?
select * from enrolleds e
 - round_id : 
 - is_registered :  - 1: 등록완료 / 0: 등록취소(환불 등)
 - start_date
 - end_date 언제까지 들을 수 있는지

select * from enrolleds_detail ed
 - week 몇주차 강의 듣고있다는 것
 - current_order :  - 1주차 몇 강. 2주차 몇 강. 누적되는 강의의 순서        영상번호
 - seen :  - 1: 보기 시작

select * from enrolleds_homeworks
 - week 몇주차 홈워크

? select * from prequestions
사전 질문

? select * from rounds 1기 2기
 - round_id : 기수 id


엑셀보다 


완강한 사람


데모그래픽(직업별로)


완강비율 직업별로

홈워크 한 비율


직종별로 수업을 완강한 비율이 다를 것이다


직종, 

sql 4
웹개발 5




강의당 몇주차까지 있는지 알 수 있는 데이터가 있나요?
현재 없습니다. enrolleds_detail에서 영상 순서를 빼줘서 계산하셔야 합니다!


레지스터 데이터랑 인롤즈 데ㅣㅇ터라 ㅇ


내가 필요한 테이블 다 조인하고 쓴다




enrolled_id
:어떤 수업에 수강생 등록이 되면, 부여되는 유니크아이디입니다~!

'SQL' 카테고리의 다른 글

엑셀보다 쉬운 SQL - 문법 정리  (0) 2021.10.24
엑셀보다 쉬운 SQL - 후기  (0) 2021.10.24
엑셀보다 쉬운 SQL - 3주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 2주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 1주차  (0) 2021.10.24
Posted by 캬웃
,


[3주차]

Join
테이블과 테이블을 붙히는 것
테이블을 붙일 때 기준이 뭔가 하나 필요하다.
(예를 들면, 두 테이블에 공통으로 들어있는 user_id)
(통상적으로 key값이라 부르는 것들이 그러하다)
(엑셀의 vlookup과 동일한데, vlookup보다 쉬움. 그래서 엑셀보다 쉬운 SQL이 되는 것임. 후후.)

! join 굉장히 실무에서 많이 쓰임. 거의 다 쓴다고 보시면 돼요. 거의 모든 쿼리에 Join이 들어간다고 보시면 돼요



테이블을 한 목적에 맞는 것들만 모아 두는 것이 가장 좋습니다
그게 실제로 웹서비스가 동작하는데 있어서
훨씬 더 편하고, 간편하고,
또 그렇게 안하면 나중에 뭔가를 수정하고 싶을 때 문제가 많이 생겨요.
그래서 그렇게 많이들 해 둡니다.




Join의 종류
Left Join, Inner Join
(, Outer Join도 있는데 거의 필요가 없음. 위 2개만 잘 써도 원하는 결과 대부분 얻을 수 있을 것)
(Inner Join이 조금 더 쉽고, 많이 쓰임)

Left Join ?
왼쪽에 있는 거 기준으로 붙인다

Inner Join ?
교집합만 나온다.
(Null값이 있는 건 빼고 나온다)

select * from enrolleds e
inner join courses c on e.course_idd = c.course_id


! 알리아스는 안 헷갈려도 붙여주는 게 좋음.
(?왜인지는 안말함.)



select c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
group by c1.title, c2.week     //두가지 다 써서 최대한 다양한 그룹으로 묶음
order by c1.title, c2.week     //앞에거 먼저 정렬하고, 뒤에 거 정렬



select c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id //한 번 더 묶는다. 바로 앞에 거랑 묶음.
where o.created_at >= '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week



1. sql은 같은 결과에 도달할 수 있는 방법이 여러가지예요. 정답이 하나가 아니다.
2. sql을 쓸 때 저도 마찬가지지만, 지금 계속 해나가는 과정이 그랬지만,
이렇게 해봤다가 또 저것도 확인했다가,
어 에러 나네, 고치고,
또 이렇게 콤마도 넣어 보고,
이렇게 왔다 갔다 왔다 갔다
하면서 만들면 되는 겁니다. 아셨죠?
그 누구도, 한 번에 쭉 위에서부터 써 가지고
탁 실행시켜서 '음 결과가 나왔군~' 이런 사람 없습니다 아셨죠

그래서 정말 심하게 말씀을 드리면
모로 가도 데이터만 나오면 된다
이렇게 일단 생각을 하시고
작업을 하셔도 무방합니다 아셨죠







left join
이런 경우에 많이 쓰겠죠.
한쪽에는 있는데 한쪽에는 없는 것을 가지고 통계내고 싶을 때

그러니, 더 큰 걸 왼쪽에 둠.

null을 찾는 거, null을 빼는 거
NULL은 대문자로 쓸 것

select u.name, count(*) as cnt from users u
left join point_users pu on u.user_id = pu.user_id
where pu.point_user_id is not NULL
group by u.name

!
count는 NULL을 제외하고 센다.

!
강의 3-7 끝에 정렬 내용 나옴.






Union
필드가 다 똑같은데, (필드명이 같다)
이어보고 싶을 때 씀.
(예를 들어, 7월달 것과 8월달 것)

(
select '7월' as month, c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
where o.created_at < '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week
)
union all
(
select '8월' as month, c1.title, c2.week, count(*) as cnt from courses c1
inner join checkins c2 on c1.course_id = c2.course_id
inner join orders o on c2.user_id = o.user_id
where o.created_at >= '2020-08-01'
group by c1.title, c2.week
order by c1.title, c2.week
)

! union에선 order by 가 안먹는다. (그래서 위에서 order by 두 줄을 빼도 결과 같음.)
(다 나온 다음에 order를 해야지, order를 한 상태로 합치는 건 안된다는 거예요.
그래서 다 나온 다음에 다시 한 번 정렬 순서를 주는 방법이 있습니다.) -> 4주차 서브퀴리 개념



클렌징
case when문을 써서
서브쿼리로 계속 써야

엑셀에서 해라






숙제: enrolled_id별 수강완료(done=1)한 강의 갯수를 세어보고, 완료한 강의 수가 많은 순서대로 정렬해보기. user_id도 같이 출력되어야 한다.



select e.enrolled_id, e.user_id, count(*) as max_count from enrolleds e
inner join enrolleds_detail ed on e.enrolled_id = ed.enrolled_id
where done = 1
group by e.enrolled_id, e.user_id
order by max_count desc



숙제는 이렇게 나왔으니 시험문제면 
group by에
group by e.enrolled_id, e.user_id 든 group by e.enrolled_id 든 맞겠지만,

실제 업무에선 select문에 맞춰서 group by도 만들어야 함.

(enrolled_id는 내가 강의들을 때 부여받는 아이디)
여기선 enrolled_id로 그룹지어도 user_id가 중복이 되지 않겠지만,
그런 문제가 생길 수 있으니
실제 업무에선 select문에 맞춰서 group by도 만들어야 함.

'SQL' 카테고리의 다른 글

엑셀보다 쉬운 SQL - 문법 정리  (0) 2021.10.24
엑셀보다 쉬운 SQL - 후기  (0) 2021.10.24
엑셀보다 쉬운 SQL - 4주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 2주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 1주차  (0) 2021.10.24
Posted by 캬웃
,


[2주차] - 통계적인 숫자들. 최대, 최소, 평균, 갯수.. 의미있는 정보로의 변환
범주(카테고리)로 묶어야지 정보들을 통계낼 수 있다.

group by
select name, count(*) from users
group by name;
group by가 들어가면 count가 그룹으로 묶어준 각각의 것에 대한 카운트가 들어간다.

!순서대로 다 쓰는 게 아니라, 쭉 쓰고 필요한 부분 다시 올라가서 수정하는 게 안헷갈리고 좋음.


min
select week, min(likes) from checkins
group by week;

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

round 반올림
select week, round(avg(likes),2) from checkins
group by week;

sum

! count가 제일 많이 쓰임.













order by
select name, count(*) from users
group by name
order by count(*);
            --------
맨 마지막에 하는 게 정렬(그러므로 맨 마지막에 써줌)
뒤에 아무것도 안쓰면 기본적으로 오름차순.(asc. ascending) desc라고 써주면 내림차순.(descending)

! 세미콜론(;)은 끝나는 부분 표시하는 건데 안붙여도 됨.


select payment_method, count(*) from orders
where course_title = '웹개발 종합반'
group by payment_method
order by count(*) desc


! 꿀팁. 이렇게 쿼리를 작성하면 편해요!
1) show tables로 어떤 테이블이 있는지 살펴보기
2) 제일 원하는 정보가 있을 것 같은 테이블에 select * from 테이블명 limit 10 쿼리 날려보기
3) 원하는 정보가 없으면 다른 테이블에도 2)를 해보기
4) 테이블을 찾았다! 범주를 나눠서 보고싶은 필드를 찾기
5) 범주별로 통계를 보고싶은 필드를 찾기
6) SQL 쿼리 작성하기!

참 쉽죠? 여러분은 이제 범주에 따라 통계치를 계산할 수 있는 사람이 되었답니다! 







별칭 기능
Alias [알리아스]

1. 첫번째 알리아스

select * from orders o
                          --
where o.course_title = '앱개발 종합반'
        --


2. 두번째 알리아스
select payment_method, count(*) as cnt from orders o
                                          -------
where o.course_title = '앱개발 종합반'
group by payment_method




<숙제>
select payment_method, count(*) as 주문건수 from orders o
where o.email like '%naver.com'
and o.course_title = '앱개발 종합반'
group by o.payment_method 




'SQL' 카테고리의 다른 글

엑셀보다 쉬운 SQL - 문법 정리  (0) 2021.10.24
엑셀보다 쉬운 SQL - 후기  (0) 2021.10.24
엑셀보다 쉬운 SQL - 4주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 3주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 1주차  (0) 2021.10.24
Posted by 캬웃
,

[질문]
- 클렌징 : 개인정보 지웠다
x- 연습용 데이터
x- ppt 
- 이거 데이터베이스 로컬이 아닌거죠? 수정 삭제하면 안되겠네요?
  나중에 아이디 줄것 수정 삭제 권한 안줄 것
- where point between 20000 and 30000
  2만하고 3만사이
   - 포함.  날짜도 포함인데 00시 00분(맨 앞) 부분이라 그럼.
  시간과 다르게 뒤에거 앞이 아니라 뒤에거 포함이 되는 건가요?

- inner join 뭐가 교집합이예요? 한 줄에 null값이 없고 전부 있는 거? 이게 교집합? 맞음
- left join 어떻게 합쳐지나? 왼쪽 거 다 나오고 겹치지 않는 부분이 오른쪽에 붙음.

[금일강좌]
1.강의수강
2.숙제
3.후기
4.숙제

- 가설분석





훈장


팀원
각오


하루천하

엄화현 마케팅활동 데이터추출 sql
이한나 스타트업 파이낸스매니저 sql복습(훈장님)
김종우 중소기업 IT운영 쪽 하다가 이번달에 개발해보려 이직. sql경험 거의 없음.
현서 20살 직장인




[1주차] - 날것의 데이터

어떤 테이블에서 어떤 필드의 값을 가져오느냐

별칭



#대소문자 상관 없음
!그러나 실제 데이터와 대소문자 맞춰서 써주는 게 나중에 안헷갈림

!꿀팁
- show tables 로 어떤 테이블이 있는지 살짝 살펴봄.
- 원하는 테이블을 select.. from.. 해서 봄. 여기서 필드명 확인하고, 값을 확인해서
  where절을 건다.




- where절하고 같이 쓰이는 문법들 - 
같지 않음  !=
범위  between A and B

         select * from orders
         where created_at between '2020-07-13' and '2020-07-15'

         2020-07-13에서 2020-07-14까지의 데이터를 불러옴

포함  in (1,3,5)
패턴 (문자열 규칙) 조건  like '%@daum.net'






limit
distinct
      select distinct(payment_method) from orders
count
      select count(*) from orders

      select count(distinct(name)) from users




!에러가 있으면 혼자서 해결해 보려는 시간 갖기. 나중에 큰 자산이 됨.
10분이든, 20분이든, 30분이든, 1시간이든.

!
where email like '%gmail.com'
and created_at between '2020-07-12' and '2020-07-14'
처럼 and 다음에 between 쓰는 경우처럼 괄호 안써도 됨.





<숙제>
select * from orders
where email like '%naver.com'
and course_title = '웹개발 종합반'
and payment_method = 'kakaopay'

'SQL' 카테고리의 다른 글

엑셀보다 쉬운 SQL - 문법 정리  (0) 2021.10.24
엑셀보다 쉬운 SQL - 후기  (0) 2021.10.24
엑셀보다 쉬운 SQL - 4주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 3주차  (0) 2021.10.24
엑셀보다 쉬운 SQL - 2주차  (0) 2021.10.24
Posted by 캬웃
,