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;