2일차

Suhyeon Lee·2024년 10월 1일
0

Time Table

시간내용
09:00-10:00코드가타
10:00-10:30오전 스크럼
10:30-11:00자료 정리
11:00-12:00튜터 직무 세션
12:00-14:00점심&자료 정리
14:00-15:00SQL 라이브 세션
15:00-18:00SQLD 2주차, 3주차 수강
18:00-19:00저녁
19:00-20:00강의 수강 및 배운 내용 정리
20:00-20:30저녁 스크럼
20:30-21:00TIL 작성
21:00-23:00부족한 부분 보충



Code kata

SQL 코드가타

37. 조건에 맞는 도서와 저자 리스트 출력하기

프로그래머스 코딩테스트 연습

  • 첫 번째 풀이 → 오답
SELECT
  b.book_id
  , a.author_name
  , b.published_date
FROM
  book b 
  LEFT JOIN author a 
  ON b.author_id = a.author_id
WHERE
  b.category LIKE '경제'
ORDER BY 
  published_date
;
  • published_date가 YYYY-MM-DD hh:mm:ss 형식인데 확인을 안 하고 그냥 제출해버렸다.

    • SQL 작성 전 데이터의 형식을 확인하는 습관 들이기!
  • 두 번째 풀이 → 정답 처리되었음

SELECT
  b.book_id
  , a.author_name
  , DATE_FORMAT(b.published_date, '%Y-%m-%d') AS published_date
FROM
  book b 
  LEFT JOIN author a 
  ON b.author_id = a.author_id
WHERE
  b.category LIKE '경제'
ORDER BY
  published_date
;
  • 더 좋은 접근법은 없을까?
    • WHERE절을 단순하게 b.category = '경제'로 처리해도 된다고 함
    • 효율성을 위해 사전 필터링하고 풀 수도 있음
      SELECT
        BOOK_ID
        , AUTHOR_NAME
        , DATE_FORMAT(PUBLISHED_DATE, '%Y-%m-%d') as PUBLISHED_DATE
      FROM
        BOOK
        INNER JOIN AUTHOR
        ON BOOK.CATEGORY = '경제' 
        and BOOK.AUTHOR_ID = AUTHOR.AUTHOR_ID
      ORDER BY
        PUBLISHED_DATE
      ;

JOIN에서 WHERE와 ON의 차이

  • JOIN에서 WHERE문으로 조건을 걸면 데이터가 많아졌을 때 불필요한 데이터도 JOIN이 들어가 연산이 늦어진다고 함
    • 특정 조건인 경우만 JOIN하기 위해서 ON에 조건을 거는 게 좋다고
      • ON: JOIN 전 필터링
      • WHERE: JOIN 후 필터링
    • JOIN보다는 Subquery 쪽으로 먼저 생각해 보면 좋다고 한다.

34. 있었는데요 없었습니다

프로그래머스 코딩테스트 연습

  • 나의 풀이 1
SELECT
  ai.animal_id
  , ai.name
FROM
  animal_ins ai 
  LEFT JOIN animal_outs ao 
  ON ai.animal_id = ao.animal_id 
  AND ai.datetime > ao.datetime
WHERE 
  ao.datetime IS NOT NULL
ORDER BY
  ai.datetime ASC
;
  • 더 간단하게 할 수 있음: 풀이 2
SELECT
  ai.animal_id
  , ai.name
FROM
  animal_ins ai
  LEFT JOIN animal_outs ao 
  ON ai.animal_id = ao.animal_id
WHERE
  ai.datetime > ao.datetime
ORDER BY
  ai.datetime ASC
;
  • 1번 풀이에서 ai.datetime>ao.datetime을 ON 안에 넣으니 ao.datetime이 NULL인 경우도 출력되어서 WHERE절 조건을 추가했는데 다시 생각해 보니 ai.datetime>ao.datetime을 WHERE절에 넣으면 간단하게 해결되는 거였음
    → 1. WHERE와 ON의 차이 익히기 2. 작동순서와 작성순서 확인하기

WHERE와 ON, USING()
※ MySQL 작동순서와 작성순서

  • 작동순서(실제 실행 순서)
    1. FROM → 조회할 테이블 설정
    2. ON → JOIN 전 필터링
    3. JOIN → 여러 테이블의 데이터를 하나의 테이블 결과로 만듦
    4. WHERE → JOIN 후 데이터 조회할 조건문(데이터 추출 조건) 생성
    • 기본적인 조건절
    • 우선적으로 모든 필드를 조건에 둘 수 있음
    1. GROUP BY → 컬럼 데이터 그룹화
    2. HAVING → 그룹화한 데이터의 조건문을 다시 생성
    • 항상 GROUP BY 뒤에 위치함
    • GROUP BY 된 이후 특정한 필드로 그룹화된 새로운 테이블에 조건 생성
    1. SELECT → 데이터 추출
    2. DISTINCT → 중복값 제거
    • SELECT절 바로 뒤에 DISTINCT문 넣음
    • 범주 확인할 때 사용
    1. ORDER BY → 순서 정렬 진행
  • 작성순서(문법 순서)
    1. SELECT
    2. FROM
    3. WHERE
    4. GROUP BY
    5. ORDER BY
  • DATEDIFF로 비교하면 안 되나요?
    • DATEDIFF는 날짜의 차이를 계산하는 거라서 같은 날짜의 시간 차이까지는 계산하지 못하므로 해당 문제에서 사용하기에는 적합하지 않다고 함

33. 상품 별 오프라인 매출 구하기

  • 나의 풀이
SELECT
  p.product_code
  , SUM(p.price*os.sales_amount) AS sales
FROM
  offline_sale AS os 
  LEFT JOIN product AS p 
  ON os.product_id = p.product_id
GROUP BY
  1
ORDER BY
  2 DESC
  , 1 ASC
;
  • 질문: SALES를 구할 때 SUM을 안 쓰면 뭐가 달라지는 걸까요?
    • SUM(p.price*os.sales_amount) sales(p.price*SUM(os.sales_amount)) sales로 풀었을 때는 제대로 나오는데 SUM을 빼고 (p.price*os.sales_amount) sales로 풀면 제대로 안 나옴
    • GROUP BY가 상품의 가격과 상품 판매량을 곱해서 나열한 다음 그룹별로 합해주지는 않는 걸까?
      • GROUP BY는 말 그대로 그룹을 지어주는 것일 뿐, 어떠한 연산이 되는 것이 아님!
      • SUM 함수를 쓴 결과와 쓰지 않은 결과를 비교해 보면 SUM을 쓰지 않은 결과에서 제품 코드별 총 판매가가 더해져 있지 않은 걸 확인할 수 있음

Python 알고리즘 코드가타

2. 두 수의 곱

프로그래머스 코딩테스트 연습

  • 나의 풀이
solution = lambda num1, num2 : num1 * num2
  • 다른 분이 푸신 것 중에 멋진 풀이가 있어서 보면서 추가 공부
    • while 문에서 0 ~ num2 -1 까지 num1을 더하는 식
    • 곱셈의 원론적인 부분에서 접근하는 방식이라 멋지다.
      • 곱이나 배에는 "반복해서 더한다"는 뜻을 내포하고 있음
      • 5x3: 5를 3번 반복해서 더하라 == 5+5+5
def solution(num1, num2):
    #return num1 * num2
    i = 0
    answer = 0
    while i < num2:
        answer += num1
        i += 1
    return answer



오전 스크럼

일간 목표

  • 코드가타 최대한 많이 풀기
  • 조사한 자료 팀 노션에 정리하기
  • SQLD 강의 2주차, 3주차 수강
  • 라이브 세션 참여
    • 11:00 - 12:00 직무 소개
    • 14:00 - 15:00 SQL 라이브 강의

주간 목표

  • SQLD 강의 1-3주차 수강 → 원래 5주차까지 들으려고 했는데 올해 마지막 ADsP 시험이 11월 3일에 있다고 해서 ADsP 시험 준비를 할까 고민 중
  • ADsP 시험 볼 건지 강의 들어보고 결정하기(금요일까지)
  • 직무 스터디 발표 준비 잘 해서 멋지게 마무리하기
  • 캠프 자료 확인하고 공부 계획 세우기



라이브 세션

튜터 직무 라이브 세션

데이터 분석 부트캠프 튜터들이 각자의 커리어와 직무 경럼을 공유하며 직무 인사이트 제공

  • 게임 회사 데이터 분석가 & 데이터 과학자의 직무와 은행권 데이터 엔지니어의 직무를 알아볼 수 있는 시간이었음
  • 게임 회사에서 실제로 사용하는 분석 기법이나 데이터 분석 접근 방향에 대해 이야기 들을 수 있어 좋았음
    • 실제 예시(대규모 업데이트 이후 업데이트 효과 분석, 유저 이탈 분석 등)와 함께 이야기를 들으니 직무에 대해 더 잘 이해할 수 있었음
    • KEY VALUE로 무엇을 올려야 할지 고민하고 골라낼 수 있는 능력도 데이터 분석가에게 꼭 필요한 능력이라는 생각이 들었음
    • "해석" 능력의 중요성을 또 한번 체감함
  • 데이터 엔지니어와 데이터 분석가는 협업을 많이 하기 때문에 엔지니어의 지식과 경험을 들어두면 훨씬 도움이 된다고 함
    • 데이터 분석가의 중요 역량 중 하나가 "소통 능력"임을 잊지 말자
    • 협업하려면 서로의 업무 흐름을 대략적으로라도 이해해야 함

SQL 라이브 강의

예제로 익히는 SQL - 전소현 튜터님

온라인 강의 학습

SQLD 자격증 챌린지

2주차 학습
3주차 학습 (1)
3주차 학습 (2)

오후 스크럼

  • 오전에 설정한 목표를 달성한 과정을 회고하며, 달성하지 못했다면 그 이유를 분석하고 논의

회고

  1. 컴퓨터 문제가 있어서 오전 11시부터 오후 3시까지 학습 진행에 어려움이 있었음
    (갑자기 멈추고 블루스크린도 뜨고 강제 종료되는 문제가 있었는데 어찌저찌 해결함)
    → ZEP이랑 ZOOM이랑 다 켜져 있어서 리소스가 많이 들어가서 발생한 문제 같기도 하고 컴퓨터 그래픽카드 문제 같기도 함(내장그래픽으로 바꾼 뒤로는 증상 없음)
    → ZOOM 수업은 아이패드로 듣는 게 좋겠다.
  2. PPT 및 발표 스크립트 준비를 위한 준비 필요 → 이왕 하는 발표 만족스럽게 하기
  3. 컴퓨터... 이번 주 지켜보고 노트북 신청해야 할 수도?
profile
2 B R 0 2 B

0개의 댓글