簡體   English   中英

獲得最高回答率問題 - Leetcode - SQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM