비율을 계산했는데,
쿼리는 문제 없어 보이는데 결과가 전부 0으로 나왔던 적 있으신가요?
예를 들어, 전체 사용자 중 몇 명이 구매로 전환되었는지를 계산한다고 할 때 :
SELECT
COUNT(DISTINCT CASE action WHEN 'purchase' THEN user_id END)
/ COUNT(DISTINCT user_id) AS conversion_rate
FROM user_journey;
쿼리 자체는 틀리지 않았지만,
전환율이 0 또는 1로만 나오는 현상이 발생할 수 있습니다.
이유는 간단합니다.
COUNT() 함수는 정수 값을 반환하므로,
정수 ÷ 정수 = 정수 계산이 되어
소수점 이하가 사라지고 전환율이 정확하게 계산되지 않습니다.
-- 방법 1 : * 1.0을 곱해 실수 유도
SELECT
COUNT(DISTINCT CASE action WHEN 'purchase' THEN user_id END) * 1.0
/ COUNT(DISTINCT user_id) AS conversion_rate
FROM user_journey;
-- 방법 2 : CAST로 명시적 변환
SELECT
CAST(COUNT(DISTINCT CASE action WHEN 'purchase' THEN user_id END) AS FLOAT)
/ COUNT(DISTINCT user_id) AS conversion_rate
FROM user_journey;
이렇게 실수형으로 변환하면
0.23, 0.58처럼 전환율이 정확하게 계산됩니다.
✔️ 정수끼리 나누면 소수점이 사라져 비율이 0으로 나올 수 있습니다.
✔️ * 1.0 또는 CAST()로 실수형 변환하면 원하는 결과를 얻을 수 있습니다.