erDiagram
Signups {
int user_id PK
datetime time_stamp
}
Confirmations {
int user_id FK
datetime time_stamp PK
ENUM action
}
Signups ||--o{ Confirmations: "has"
컨펌 비율 찾기
문제 풀이
MySQL 1
WITH TEMP AS (
SELECT USER_ID, ROUND(COUNT(IF(ACTION='CONFIRMED',1,NULL))/COUNT(*),2) AS rate
FROM CONFIRMATIONS
GROUP BY USER_ID
)
SELECT S.user_id, COALESCE(T.rate,0) AS confirmation_rate
FROM SIGNUPS AS S
LEFT JOIN TEMP AS T ON T.user_id = S.user_id
count if / count(*)로 비율 구해주기.
signups table에서 전체 유저를 가져와야해서 left join을 사용하고 null은 coalesce 사용
MySQL 2
WITH TEMP AS (
SELECT
USER_ID,
ROUND(SUM(IF(ACTION='confirmed',1,0))/COUNT(*),2) AS CONFIRMATION_RATE
FROM CONFIRMATIONS
GROUP BY USER_ID
)
SELECT
S.USER_ID,
COALESCE(T.CONFIRMATION_RATE,0) AS CONFIRMATION_RATE
FROM
(SELECT DISTINCT USER_ID FROM SIGNUPS) S
LEFT JOIN TEMP T ON S.USER_ID = T.USER_ID
댓글