본문 바로가기
기록/TIL

[TIL] 231120 - 데브코스 36일차

by 투말치 2023. 11. 20.

목차

    반응형

    학습 내용

    밀린 강의 듣는 중(5주차 3, 4일차 강의)

    - GROUP BY

    - Aggregate 함수 : COUNT, SUM, AVG, MIN, MAX, LISTAGG

    - CTAS

    - CTE

    - JOIN : INNER JOIN, LEFT/RIGHT JOIN, FULL JOIN, CROSS JOIN, SELF JOIN

     

     

    새로 알게 된 것

    가장 많이 사용된 채널은?

    이런 질문을 보면 가장 많이 사용되었다는 기준이 무엇인지에 대해서 생각을 해야 한다.

     

    날짜 파싱

    1. TO_CHAR(timestamp, 'YYYY-MM')

    2. LEFT(timestamp, 자릿수)

    3. DATE_TRUNC('month', timestamp)

    4. SUBSTRING(timestamp, 시작위치, 추출할 문자열의 길이)

     

    CTAS : Create Table As

    - 원하는 조건으로 새로운 테이블을 생성할 때 사용

     

    CTE

    - with을 사용해서 임시테이블을 만드는 것

    WITH name (column, ...) AS (
    	SELECT ...
        FROM ...
        WHERE ...
    )
    SELECT *
    FROM name;

     

    JOIN을 할 때 고려할 점

    - 중복 레코드 확인

    - primary key의 uniqueness가 보장되는지 확인

    - 조인하는 테이블들 간의 관계를 명확히 정의

    => 만약 one to many인 경우 left/right join을 할 때 기준이 무엇이냐에 따라서 결과가 달라짐

     

    Day3 숙제 풀이

    paidUsers에 대해서 조건을 어떻게 넣어야 하나 고민했는데, 풀이를 보니 case when으로 조건은 amount가 0보다 큰 경우로 null 값인 경우도 해결할 수 있었다. 그리고 then으로 userid 값을 넣고 맨 앞에 distinct를 넣어서 unique user에 대한 부분도 해결했다.

    COUNT(DISTINCT CASE WHEN amount > 0 THEN A.userid END) AS paidUsers

     

    conversionRate는 float으로 타입을 바꾸기 위해 100.0을 곱했다. 만약 분모가 0인 경우를 대비해 NULLIF 함수를 사용한다.

    NULLIF(a, b) : 두 값이 동일하면 null을 반환하고 그렇지 않으면 첫번째 값이 반환된다.

    아래의 경우에는 만약 uniqueUsers 값이 0이면 null을 반환하고 그렇지 않으면 기존 uniqueUsers값이 반환된다.

    null으로 사칙연산을 하면 결과도 null이 나오기 때문에 에러가 발생하지 않는다.

    ROUND(paidUsers*100.0/NULLIF(uniqueUsers, 0), 2) AS conversionRate,

     

    COALESCE

    - NULL 값을 다른 값으로 바꿔주는 함수

    - value가 null이면 0을 리턴함

    SELECT
         value,
         COALESCE(value, 0)
    FROM table;

     

    느낀 점

    조건을 적용할 때 여러 방법에 대해서 생각해야 할 것 같다.

    반응형

    '기록 > TIL' 카테고리의 다른 글

    [TIL] 231214 - 데브코스 60일차  (0) 2023.12.14
    [TIL] 231212 - 데브코스 58일차  (0) 2023.12.12
    [TIL] 231119 - 데브코스 35일차  (1) 2023.11.19
    [TIL] 231113 - 데브코스 29일차  (0) 2023.11.13
    [TIL] 231110 - 데브코스 26일차  (0) 2023.11.10