Leetcode力扣 MySQL数据库 578 查询回答率最高的问题

578 查询回答率最高的问题


sql架构

create table if not exists survey_log_578 (id int, action varchar(255), question_id int, answer_id varchar(25), q_num int, timestamp int);
truncate table survey_log_578;
insert into survey_log_578 (id, action, question_id, answer_id, q_num, timestamp) values ('5', 'show', '285', 'none', '1', '123');
insert into survey_log_578 (id, action, question_id, answer_id, q_num, timestamp) values ('5', 'answer', '285', '124124', '1', '124');
insert into survey_log_578 (id, action, question_id, answer_id, q_num, timestamp) values ('5', 'show', '369', 'none', '2', '125');
insert into survey_log_578 (id, action, question_id, answer_id, q_num, timestamp) values ('5', 'skip', '369', 'none', '2', '126');


从 survey_log 表中获得回答率最高的问题,survey_log 表包含这些列:id, action, question_id, answer_id, q_num, timestamp。

id 表示用户 id;action 有以下几种值:"show","answer","skip";当 action 值为 "answer" 时 answer_id 非空,而 action 值为 "show" 或者 "skip" 时 answer_id 为空;q_num 表示当前会话中问题的编号。

请编写 sql 查询来找到具有最高回答率的问题。
示例:

输入:
+------+-----------+--------------+------------+-----------+------------+
| id   | action    | question_id  | answer_id  | q_num     | timestamp  |
+------+-----------+--------------+------------+-----------+------------+
| 5    | show      | 285          | null       | 1         | 123        |
| 5    | answer    | 285          | 124124     | 1         | 124        |
| 5    | show      | 369          | null       | 2         | 125        |
| 5    | skip      | 369          | null       | 2         | 126        |
+------+-----------+--------------+------------+-----------+------------+
输出:
+-------------+
| survey_log  |
+-------------+
|    285      |
+-------------+
解释:
问题 285 的回答率为 1/1,而问题 369 回答率为 0/1,因此输出 285 。


解题


使用了一个子查询生成临时表 tbl,但使用 if 语句后,其实可以直接计算回答率,而不需要进行子查询。最终设计的查询如下:
 

select question_id as survey_log 
from survey_log_578
group by question_id
order by avg(action = 'answer') desc limit 1;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziko-1101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值