하.. 빡센 하루였다.

 

그만큼의 뿌듯함이 또 있다.

 

이 강의를 수료하면 SQL은 '능숙'이라고 할 수 있다고 하셨으니,

 

나도 이제 '능숙' 레벨이다.

 

물론 못다한 강의는 다 완강해야겠지만.

 

 

강의의 질도 좋고,

 

강의 시스템도 좋고,

 

강의 과정 프로세스도 좋고,

 

질답 및 친절함도 좋다.

 

 

전체적으로 깔끔한 느낌이며,

 

중간중간 에니메이터 등도 마치 게임하는 느낌도 줘서

 

사람의 부담을 덜어준다.

 

 

4주치 강의를(강사님은 6주치라고 하심. 마지막 프로젝트도 있어서 그러신 듯) 하루에 완료하려니 힘들힘들

 

하지만 절대 내용이 소홀하지는 않다.

 

 

단지 시간이 타이트 하니 강의내용 따라서 중간중간 코딩할 시간은 없어서 이건 나중에 복습해야 한다.

 

좋은 강의였다.

 

 

또 목적에 맞게 깔끔하게 정제된 강의라 좋았다.

 

 

복습을 잘해서 더 내 것으로 만들어야겠다.

 

이상.

 

 

그 와중에 1등했다.

'SQL' 카테고리의 다른 글

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



[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 캬웃
,