6일차

Suhyeon Lee·2024년 10월 8일
0

Time Table

시간내용
09:00-10:00코드카타
10:00-10:30오전 스크럼
10:30-12:00팀 과제 데이터 분석
12:00-13:00점심식사
13:00-14:00ADsP 강의 수강
14:00-15:00SQL 라이브 세션
15:00-18:00팀 과제 데이터 분석
18:00-19:00저녁식사
19:00-20:00데이터 분석 결과 공유
20:00-20:30저녁 스크럼
20:30-21:00TIL 작성
21:00-23:00부족한 부분 보충



Code kata

SQL 코드카타

44. 가격대 별 상품 개수 구하기

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

  • 작성한 코드
SELECT
  FLOOR(price/10000)*10000 AS price_group
  , COUNT(*) AS products
FROM
  product
GROUP BY
  price_group
ORDER BY
  price_group
;
  • 처음에는 아래와 같이 생각했다:

    SELECT
      CASE
        WHEN price < 10000 THEN 0
        WHEN price < 20000 THEN 10000
        WHEN price < 30000 THEN 20000
        WHEN price < 40000 THEN 30000
        WHEN price < 50000 THEN 40000
        WHEN price < 60000 THEN 50000
        WHEN price < 70000 THEN 60000
        WHEN price < 80000 THEN 70000
        WHEN price < 90000 THEN 80000
        WHEN price < 10000 THEN 90000
      END AS price_group
      , COUNT(*) AS products
    FROM
      product
    GROUP BY
      price_group
    ORDER BY
      price_group
    ;
    • 하지만 이 방식은 금액의 범위가 늘어나면 비효율적이라서 좀 더 간단한 방법을 사용하고 싶었음 → FLOOR 함수(소수점을 내림하여 정수 값을 반환) 이용
  • 추가: DIV 함수(나누었을 때 몫을 구하는 함수) 이용

SELECT
  10000*(price DIV 10000) AS price_group
  , COUNT(*) AS products
FROM
  product
GROUP BY
  price_group
ORDER BY
  price_group
;
  • 추가2: TRUNCATE(숫자, 버림할 자릿수) → 숫자의 특정 자리수 이하를 버림
-- WITH 서브 쿼리 활용
WITH p AS (
  SELECT
    *
    , TRUNCATE(price, -4) AS pg
  FROM
    product
)
SELECT
  pg AS price_group
  , COUNT(*) AS products
FROM
  p
GROUP BY
  pg
ORDER BY
  price_group
;

-- 인라인 뷰 서브쿼리 활용
SELECT
  pg.price_group
  , COUNT(*) AS products
FROM (
  SELECT
    *
    , TRUNCATE(price, -4) AS price_group
  FROM
    product
) pg
GROUP BY
  pg.price_group
ORDER BY
  pg.price_group
;

Python 코드가타

4. 나이 출력

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

  • 작성한 코드
def solution(age):
    year = 2022
    answer = year - age + 1
    return answer
  • 다른 풀이
solution = lambda age : 2022 - int(age) + 1
def solution(age):
    answer = 2022-int(age)+1
    return answer
  • int는 소수점 제거용



SQL 라이브 세션 과제 제출

3회차 과제 풀이



팀 과제

이커머스 데이터 분석
시간별 비교
Pivot Table

  • 모든 시간대별 통계 내기: 재귀적 쿼리(with recursive)와 outer join 사용
WITH RECURSIVE temp as (
    (SELECT 0 HOUR)
    union
    (SELECT HOUR+1 FROM temp where HOUR < 23)
)

SELECT temp.HOUR, IFNULL(A.COUNT, 0) COUNT
FROM temp LEFT OUTER JOIN (
    SELECT HOUR(DATETIME) HOUR, COUNT(*) COUNT
    FROM ANIMAL_OUTS
    GROUP BY HOUR
    ORDER BY HOUR) A
ON temp.HOUR = A.HOUR;



강의 수강

ADsP 자격증 챌린지 3주차

  • '01. 데이터 분석 계획' 수강



SQL 라이브 세션

예제로 익히는 SQL - 4회차

profile
2 B R 0 2 B

0개의 댓글