๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
๋ฆฌํธ์ฝ๋ Problems, https://leetcode.com/problemset/all/์์ ๋ฐํ๋๋ค.
โ๋ฌธ์
https://leetcode.com/problems/confirmation-rate/description/
Table : Signups
Table : Confirmations
The confirmation rate of a user is the number of 'confirmed' messages divided by the total number of requested confirmation messages. The confirmation rate of a user that did not request any confirmation messages is 0.
Round the confirmation rate to two decimal places.
Write a solution to find the confirmation rate of each user.
Return the result table in any order.
The result format is in the following example.
โ ํ์ด
๋ฌธ์ ์๊ตฌ์ฌํญ
Signups ์ ์ฌ์ฉ์์ ๊ฐ์ (๋ฑ๋ก)์ผ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
Confirmations์ ๊ฐ์ ํ ์ฌ์ฉ์์ค ๋ฉ์์ง๋ฅผ ์์ฒญํ ์ฌ์ฉ์๋ค์ ์์ฒญ์ผ์์ ์์ฒญ ์ํ(action)์ ๋ํ๋ธ๋ค.
๋ฌธ์ ์์ ์๊ตฌํ๋ confirmation_rate๋ user_id๋ณ๋ก 'ํ์ธ๋' ๋ฉ์์ง ์๋ฅผ ์์ฒญํ ์ ์ฒด ํ์ธ ๋ฉ์์ง ์๋ก ๋๋์ด์ ๊ตฌํ ์ ์๋ค.
ํ์ธ ๋ฉ์์ง๋ฅผ ์์ฒญํ์ง ์์ ์ฌ์ฉ์๋ confirmation_rate๋ฅผ 0 ์ผ๋ก ์ถ๋ ฅํ๊ณ ํ์ธ ๋น์จ์ ์์์ ์ดํ ๋ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํด์ผ ํ๋ค.
๊ฐ ์ฌ์ฉ์๋ณ confirmation_rate๋ฅผ ๊ตฌํ๊ธฐ ์ํด
โ ๊ฐ์ ์ดํ ์์ฒญ์ด ์์๋ ์ ์ ๊น์ง ํฌํจํ ์ ์๋๋ก signups ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก left join ํด์ฃผ๊ณ
โก CASE๋ฌธ๊ณผ ์ง๊ณํจ์SUM์ ์ฌ์ฉํด์ ์ฌ์ฉ์๋น ( action = 'confirmed' ์ธ ๋ฉ์์ง ์ ) / ์ ์ฒด ๋ฉ์์ง์ ๋ฅผ ๊ตฌํ๋
๊ฐ์ ์ดํ ์์ฒญ์ด ์์๋ ์ ์ ์ ๊ฒฝ์ฐ action์ด null๋ก ์กฐ์ธ๋ ์ํ์ด๋ฏ๋ก ๋ฌธ์ ์์ฒญ์ ๋ฐ๋ผ IFNULL๋ก 0 ์ฒ๋ฆฌ.
์ด ์ธ ์ถ๋ ฅ๊ฐ์ ์ถ๋ ฅ ์กฐ๊ฑด์ธ ๋ฐ์ฌ๋ฆผ ์ฒ๋ฆฌ ํด์ค๋ค.
SELECT T1.user_id,
ROUND(IFNULL(
SUM(CASE WHEN T2.action = 'confirmed' THEN 1 ELSE 0 END) / COUNT(T2.action)
, 0)
, 2) AS confirmation_rate
FROM Signups T1
LEFT JOIN Confirmations T2
ON T1.user_id = T2.user_id
GROUP BY 1
โ ๋ฌธ์ ํ์ด ํ๊ณ
์๋ ์ฟผ๋ฆฌ๊ฐ ๊ธฐ์กด์ ๋ฌธ์ ํ์ด๋๋ก ์ฝ๋ ์ง๋ฉด์ ๊ณ ๋ฏผํ ๊ณผ์ ์ธ๋ฐ
FROM์ ์ ์๋ธ์ฟผ๋ฆฌ๋ก ์์ฑํ๊ณ ๋ณด๋ ๊ทธ๋ฃนํ์ ๋ฏธ๋ฆฌ ํด์ฃผ๋ฉด ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ ํ์๊ฐ ์์๋ค.
์กฐ์ธํ๊ณ group by ๋ฅผ ๋ง์ด ์ฌ์ฉํด๋ณด์ง ์์์ ์๊ฐํ์ง ๋ชปํ ๋ถ๋ถ์ด์๋๋ฐ ์ด๋ฒ ๋ฌธ์ ํ์ด๋ก ํ์ฉํด๋ณผ ์ ์์๋ค.
SELECT user_id, ROUND(IFNULL(
SUM(CASE WHEN T3.action = 'confirmed' THEN 1 ELSE 0 END) / COUNT(T3.action)
, 0), 2) AS confirmation_rate
FROM (
SELECT T1.user_id, T2.action
FROM Signups T1
LEFT JOIN Confirmations T2
ON T1.user_id = T2.user_id) T3
GROUP BY 1
๐โ๏ธ ๋ฌธ์ ํ์ด์ mysql ์ฟผ๋ฆฌ ํจ์จ์ฑ ๋์ด๊ธฐ ๋ฑ ํฌ์คํ ์ ๋ํ ์๊ฒฌ ๋ฐ ๊ธฐ์ ์กฐ์ธ ๋๊ธ ๋ชจ๋ ํ์ํฉ๋๋ค!
'Growth ๐ณ > Practice ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Leet Code] 1068. Product Sales Analysis I (1) | 2023.10.07 |
---|---|
[Leet code] 1075. Project Employees I (1) | 2023.10.06 |
[Leet code] 1393. Capital Gain/Loss (1) | 2023.10.04 |
[Leet code] 1204. Last Person to Fit in the Bus (0) | 2023.09.26 |
1907. Count Salary Categories (0) | 2023.09.24 |