240725_TIL

J Lee·2024년 7월 25일
1

아무리 사소하더라도 배움이 없는 날은 없다.

SQL 코드카타

문제 링크

문제에서 모든 platform과 experiment_name을 주었기 때문에
cross join을 써서 모든 경우의 수를 먼저 구한 후 (CTE a)
실제 시험 결과 데이터(CTE b)와 조인해서 답을 구해야 한다.

만약 Experiments 테이블에 있는 결과를 기준으로 cross join을 하게 되면
platform이나 experiment_name 중 빠져있는 값이 있을 경우
모든 경우의 수를 커버하지 못해 오답이 뜨게 된다.
약간 치사하게 느껴지긴 하지만 문제를 잘 읽자.

WITH platform
     AS (SELECT "Android" AS "platform"
         UNION
         SELECT "IOS"
         UNION
         SELECT "Web"),
     experiment_name
     AS (SELECT "Reading" AS "experiment_name"
         UNION
         SELECT "Sports"
         UNION
         SELECT "Programming"),
     a
     AS (SELECT *
         FROM   platform,
                experiment_name),
     b
     AS (SELECT platform,
                experiment_name,
                Count(experiment_id) AS "cnt"
         FROM   experiments e
         GROUP  BY 1,
                   2)
SELECT a.platform,
       a.experiment_name,
       Ifnull(cnt, 0) AS "num_experiments"
FROM   a
       LEFT JOIN b
              ON a.platform = b.platform
                 AND a.experiment_name = b.experiment_name;
profile
기본기를 소홀히 하지 말자

0개의 댓글

관련 채용 정보