【MySQL】ALL函数的巧用 以及 排序(order by)巧用 sum(条件表达式) 语法

力扣题

1、题目地址

578. 查询回答率最高的问题

2、模拟表

SurveyLog 表:

Column NameType
idint
actionENUM
question_idint
answer_idint
q_numint
timestampint
  • 这张表可能包含重复项。
  • action 是一个 ENUM(category) 数据,可以是 “show”、“answer” 或者 “skip” 。
  • 这张表的每一行表示:ID = id 的用户对 question_id 的问题在 timestamp 时间进行了 action 操作。
  • 如果用户对应的操作是 “answer” ,answer_id 将会是对应答案的 id ,否则,值为 null 。
  • q_num 是该问题在当前会话中的数字顺序。

3、要求

回答率 是指:同一问题编号中回答次数占显示次数的比率。

编写一个解决方案以报告 回答率 最高的问题。如果有多个问题具有相同的最大 回答率 ,返回 question_id 最小的那个。

查询结果如下例所示。

示例 1:

输入:
SurveyLog table:

idactionquestion_idanswer_idq_numtimestamp
5show285null1123
5answer2851241241124
5show369null2125
5skip369null2126

输出:

survey_log
285

解释:
问题 285 显示 1 次、回答 1 次。回答率为 1.0 。
问题 369 显示 1 次、回答 0 次。回答率为 0.0 。
问题 285 回答率最高。

4、代码编写

我的写法

SELECT question_id AS survey_log
FROM (SELECT question_id, SUM(action = 'answer')/SUM(action = 'show') AS qFROM SurveyLogGROUP BY question_id
) AS one
WHERE q >= ALL(SELECT SUM(action = 'answer')/SUM(action = 'show') AS qFROM SurveyLogGROUP BY question_id
)
ORDER BY question_id
LIMIT 1

代码解析:

1、先算出问题各自的回答率(sum(条件表达式) 只要里面条件表达式是 true 就加一,和 count 作用一样)

SELECT question_id, SUM(action = 'answer')/SUM(action = 'show') AS q
FROM SurveyLog
GROUP BY question_id

2、求出回答率是最高的问题

WHERE q >= ALL(SELECT SUM(action = 'answer')/SUM(action = 'show') AS qFROM SurveyLogGROUP BY question_id
)

ALL 函数的效果可以理解成(这是 ALL 前面是 >= 或 > 的情况,如果ALL前面是 <= 或 < 的情况,则是 MIN)

SELECT MAX(q)
FROM (SELECT SUM(action = 'answer')/SUM(action = 'show') AS qFROM SurveyLogGROUP BY question_id
) AS one

还有一个 ANY 函数,与 ALL 函数相反(ANY 前面是 >= 或 > 的情况,是 MIN,如果 ANY 前面是 <= 或 < 的情况,则是 MAX)

具体可参考:MySQL 中 ALL 和 ANY 的用法
参考里面注意看评论,参考里面最后一个例子看着是有误的

网友写法

SELECT question_id AS survey_log
FROM SurveyLog
GROUP BY question_id
ORDER BY SUM(action = 'answer')/SUM(action = 'show') DESC , question_id
LIMIT 1

代码解析:

1、分组已经决定了后面出来的条数,我们要取出满足条件的放在前面,然后取一条即可(LIMIT 1),这就需要用到排序。

2、排序的话,我们知道是要 回答率高 的放在前面,SUM(action = 'answer')/SUM(action = 'show') 就是算出回答率,DESC 倒序

  • 后面按要求如果 最大回复率没有重复,直接取第一条即可
  • 后面按要求如果 最大回答率有重复,则按 question_id 正序排后,再取第一条即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[排序算法] 如何解决快速排序特殊情况效率低的问题------三路划分

前言 在[C/C]排序算法 快速排序 (递归与非递归)一文中,对于快速排序的单趟排序一共讲了三种方法: hoare、挖坑法、双指针法 ,这三种方法实现的快速排序虽然在一般情况下效率很高,但是如果待排序数据存在大量重复数据,那这几种方法的效率就很低,而为了解决快速排序在这样特殊情况…

XCode Build报错

XCode Build时报以下错误 B/BL out of range 143266484 (max /-128MB) 错误提示表明生成的机器代码太大&#xff0c;超出了限制 需要在XCode工程中添加宏定义&#xff0c;使得生成的可执行文件超过限制 步骤&#xff1a; 在项目设置页面中&#xff0c;选择 “Build Settings…

labelme的安装

首先尝试在(openmmlab)的python3.8的环境下安装&#xff08;失败&#xff09;。应该是我环境其他部分不对&#xff0c;和python版本应该没什么关系。&#xff08;后续&#xff0c;创建新的环境后成功&#xff0c;可直接看最后一部分。&#xff09; 首先安装是没问题的 pip in…

web学习笔记(十二)

目录 1.运算符 1.1算术运算符 1.2比较运算符&#xff08;关系运算符&#xff09; 1.3赋值运算符 1.4逻辑运算符 1.5条件运算符 1.6运算符的优先级 1.7补充 2.流程控制 2.1顺序结构&#xff1a; 2.2分支结构&#xff1a; &#xff08;1&#xff09;单分支&#xff08…

浅谈智能照明系统调试阶段节能方案的探究与产品选型

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】针对当今智能照明系统调试完成前能源浪费的问题&#xff0c;本文结合工程案例&#xff0c;分析研究了智能照明系统调试阶段的节能方法&#xff0c;提出了采用时间控制器来解决能源及人工浪费等问题的方式。实践证明&a…

深度学习-模型转换_所需算力相关

模型转换相关 tensflow转onnx python -m tf2onnx.convert \--graphdef /root/autodl-tmp/warren/text-detection-ctpn/data/ctpn.pb \--output ./model.onnx --inputs Placeholder:0 --outputs Reshape_2:0&#xff0c;rpn_bbox_pred/Reshape_1:0 pytorch转onnx #!/usr/…

SMTP发送邮件命令行怎么操作?

在现代信息社会中&#xff0c;电子邮件已经成为人们沟通、工作和交流的重要工具。SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;作为电子邮件传输的标准之一&#xff0c;通过命令行操作可以更为灵活地进行邮件的发送。本文将介绍如何使用命令行进行SMTP邮件发送&…

基于spark的个性化招聘推荐系统

介绍 本就业推荐系统是一个基于Spark框架的个性化推荐平台&#xff0c;使用Python Django框架、Vue和Element-Plus UI组件库构建而成。该系统通过Scrapy爬虫框架抓取招聘网站的职位数据&#xff0c;用户可以根据关键词查询符合条件的职位信息&#xff0c;同时还提供了基于协同…

ps导出图像自动修改dpi问题的处理

问题 今天修改一个图片&#xff0c;一切都准备就绪后&#xff0c;只要一导出图片&#xff0c;像素不变&#xff0c;但dpi立刻就变成了96dpi&#xff0c;无论怎么修改就是这个值&#xff0c;但我的原值是300dpi&#xff0c;差的不是一点半点。最后在网友的帮助下解决&#xff0…

和vue2对比的Vue3新写法,在vue2基础上快速上手vue3项目

本文的目的&#xff0c;是为了让已经有 Vue2 开发经验的 人 &#xff0c;快速掌握 Vue3 的写法。 一、Vue3 里 script 的三种写法 首先&#xff0c;Vue3 新增了一个叫做组合式 api 的东西&#xff0c;英文名叫 Composition API。因此 Vue3 的 script 现在支持三种写法&#x…

QT应用篇:QT自定义最小化托盘显示和操作

将应用程序最小化到托盘任务栏中,可以使用Qt框架中的QSystemTrayIcon类。该类允许应用程序在关闭窗口后最小化到系统托盘,保持在后台运行,同时可以显示应用程序图标、添加右键菜单功能以及发送消息通知等。通过学习这些技术,能够为自己的Qt应用程序增加更多的交互性和便利性…

c++:拓扑排序

考研机试&#xff1a;拓扑排序 给定一个 n个点 m条边的有向图&#xff0c;点的编号是 1到 n&#xff0c;图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列&#xff0c;如果拓扑序列不存在&#xff0c;则输出 −1。 若一个由图中所有点构成的序列 A满足&#xff1a;对…

关于Js深拷贝的三种方法详细讲解

目录 前言 一、pandas是什么&#xff1f; 二、使用步骤 1.利用函数递归来实现深拷贝 2.利用引入lodash包 3.利用JSON字符串转换 总结 前言 当涉及到JavaScript数据拷贝的时候&#xff0c;深拷贝是一个非常关键的概念。在JavaScript中&#xff0c;对象和数组被认为是引用类型&a…

Linux CentOS 8.x、9.x 系统安装启动某些服务报:libtinfo.so.5、libncurses.so.5 的问题,解决方式

场景&#xff1a; 启动服务 xxx-server start 报如下问题&#xff1a; error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory 解决&#xff1a; 1、根据报错内容可以看出&#xff0c;是因为xxx服务在启动的时候…

php实现定时任务

在PHP中&#xff0c;你可以使用不同的方法来实现定时任务。以下是其中两种常见的方法&#xff1a; 使用Cron Job&#xff1a; Cron是一种在Unix和类Unix系统上运行定期任务的工具。你可以通过设置Cron Job来定时运行PHP脚本。以下是一个简单的例子&#xff1a; 首先&#xff0c…

结构体(structure)的认识

前言——————希望现在在努力的各位都能感动以后享受成功的自己&#xff01; 今天我们来了解了解一下结构体&#xff0c;结构体又有什么奥妙呢&#xff0c;废话不多说&#xff0c;何为结构体呢&#xff1f;------->结构是⼀些值的集合&#xff0c;这些值称为成员变量。结…

每日算法打卡:子矩阵的和 day 8

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 题目分析示例代码 原题链接 796. 子矩阵的和 题目难度&#xff1a;简单 题目描述 输入一个 n 行 m 列的整数矩阵&#xff0c;再输入 q 个询问&#xff0c;每个询问包含四个整数…

即时设计:设计稿与PPT完美结合,让您的创意作品更具影响力

PPT助手 更多内容 在设计领域&#xff0c;将设计稿与PPT结合起来&#xff0c;可以让您的作品更具吸引力和影响力。为了满足这一需求&#xff0c;我们向您推荐一款强大的设计工具&#xff0c;它可以将设计稿导出为PPT文件&#xff0c;支持线上预览和编辑&#xff0c;让您的创意…

2024年大数据不完全预测

人工智能的进步可能是2024年的主要推动力&#xff0c;也凸显出大数据的挑战——如何存储、管理、管理和使用大数据——从未如此紧迫。&#xff0c;因为如果作为基石的数据失控&#xff0c;人工智能就没有意义了。当然反之亦然。 人工智能的进步可能是2024年的主要推动力&#…

【leetcode】力扣算法之相交链表【中等难度】

题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数…