[英]Get Highest Answer Rate Question - Leetcode - SQL
我正在嘗試解決以下 Leetcode SQL 問題:
問題鏈接:https://leetcode.com/problems/get-highest-answer-rate-question/
描述:
表:調查日志
問題的回答率是用戶回答問題的次數除以用戶顯示問題的次數。
編寫 SQL 查詢以報告回答率最高的問題。 如果多個問題的最大回答率相同,則報告 question_id 最小的問題。
這是我的代碼:
WITH Answers AS (
SELECT question_id, COUNT(question_id) AS ANSWER_COUNT
FROM SurveyLog
WHERE action = 'answer'
GROUP BY question_id),
A AS (SELECT question_id, COUNT(question_id) AS SHOW_COUNT
FROM SurveyLog
WHERE action = 'show'|'skip'
GROUP BY question_id),
B AS (SELECT Answers.question_id, DENSE_RANK() OVER (PARTITION BY Answers.question_id ORDER BY IFNULL((Answers.ANSWER_COUNT/A.SHOW_COUNT), 0) DESC) AS 'Rank'
FROM Answers
INNER JOIN A ON A.question_id = Answers.question_id
ORDER BY 'Rank' ASC, Answers.question_id ASC)
SELECT DISTINCT question_id AS survey_log FROM B
LIMIT 1;
嘗試使用 windows function 來計算 answer_count 和 show_count。
WITH Answers AS (
SELECT *,
COUNT(CASE action WHEN 'show' THEN action END) OVER (PARTITION BY question_id ORDER BY question_id) AS show_count,
COUNT(answer_id) OVER (PARTITION BY question_id ORDER BY question_id) AS answer_count
FROM survey_log
),
A AS (
SELECT question_id,
MAX(answer_count)/MAX(show_count) AS ranked
FROM Answers
GROUP BY question_id
)
SELECT question_id
FROM A
WHERE ranked = (SELECT MAX(ranked) FROM A)
;
看演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.