2024-01-01 力扣高频SQL50题目 练习笔记

1. 1661求机器平均运行时间

在做这道题的时候,我遇到了4个问题

# 求平均的问题 如何找到个数? -> 相减对应列值后,直接average 就行。因为avg就是自动确定要除的个数(当然要联合正确的group by 分组)

# 怎么根据machine_id和process_id 去匹配 -> 自联结

# start 和 end 如何确定 -> 自联结指定

# group by 分组 如果没有加分组,可能就不对。什么时候要加分组呢?聚合函数avg,sum,count的时候,都“应该”加。还有就是需要根据xx分组。筛选出每个唯一的值,并根据这些唯一的值进行查询

2 577员工奖金

这是一个很简单的连表查询,要求找出奖金小于1000元的员工姓名和金额。

于是,我最开始这样写:
 

select e.name,b.bonus from Employee e left join Bonus b on e.empId = b.empId

where b.bonus <1000

但显示不对。我发现答案里面有null,说明在Bonus中的bonus有可能是null,也就是没有这条数据。那么就需要加上判断是否是null。

select e.name,b.bonus from Employee e left join Bonus b on e.empId = b.empId

where b.bonus is null or  b.bonus <1000

3 1280.学生们参加各科测试的次数

这个题目我写了好几遍。

第一次尝试,没有写出来,看了提解启发思路,再写,不对

 select a.student_id  student_id,a.student_name ,b.subject_name ,count(b.subject_name)attended_exams

 from Students a right join Examinations c on a.student_id = c.student_id

 left join Subjects b on b.subject_name =  c.subject_name group by a.student_id,a.student_name

 ,b.subject_name order by a.student_id,b.subject_name

第二次尝试,不对

 select a.student_id ,a.student_name ,b.subject_name ,count(b.subject_name)attended_exams

 from Students a  join Subjects b left join Examinations c on a.student_id = c.student_id

 and b.subject_name =  c.subject_name group by a.student_id,a.student_name

 order by a.student_id,b.subject_name

第三次尝试,不对

 select a.student_id ,a.student_name ,b.subject_name ,count(b.subject_name)attended_exams

 from Students a  join Subjects b left join Examinations c on a.student_id = c.student_id

 and b.subject_name =  c.subject_name group by a.student_id, c.subject_name

 order by a.student_id,b.subject_name

最后一次,比对提解,逐帧查看问题出在哪里

select a.student_id ,a.student_name ,b.subject_name ,count(c.subject_name)attended_exams

from Students a  join Subjects b left join Examinations c on a.student_id = c.student_id

and b.subject_name =  c.subject_name group by a.student_id, a.student_name,b.subject_name

order by a.student_id,b.subject_name

# 问题1 考试次数 0 的没有罗列出来 -> 我换个表连接方向,但好像还是不行唉。后来发现是分组和count()列的问题。

# 问题2 分组条件 我选学生名 学生id 这不对的。

# 问题3 分组条件 我选择 考试表的subject_name,也是不对的。

正确做法:应该根据科目表的subject_name分组,不然就没有考试表次数为0的记录。

# 问题4 count的时候,要去count考试表里的subject_name。

看来,分组条件不是随便选的,要起到唯一性,如果分组条件不唯一,可能会导致查询结果的重复或错误。而count的列名也不是随便选的!

4. 570.至少有5名直接下属的经理

最开始,我这样写

select t.name from (select e1.name as name,count(e2.managerId) from Employee e1,Employee e2 where e1.id = e2.managerId

group by e1.name having count(e2.managerId) >4 ) t

我点击运行,看通过了测试用例,就开心大吉了。

但是当我点击提交的时候,提示我解答错误,没有通过全部的测试用例。

这里我没有仔细看,我以为是没有去重,于是我这样写

select distinct t.name from (select e1.name as name,count(e2.managerId) from Employee e1,Employee e2 where e1.id = e2.managerId

group by e1.name

having count(e2.managerId) >4 ) t

发现还是不对,点开源码,我才明白,我上面写的SQL无法解决重名的问题!

因此,需要去掉distinct,以及在分组的时候不要根据姓名name分组,而是要根据主键id去分组。

select t.name from (select e1.name as name,count(e2.managerId) from Employee e1,Employee e2 where e1.id = e2.managerId

group by e1.id

having count(e2.managerId) >4 ) t

5.1934 确认率

在写这道题的时候,我想到了以下问题:

# 联表时候 怎么 自联结?因为我想,需要找出“确认”的个数。->后面发现直接用if(条件,1,0),这样就可以实现这个效果。而总个数直接count(c.action)就可以。

# 怎么确认 timeout 和 confirmed 的个数?count什么呢?-> 同上。

# sum 怎么统计 action里 为 某个值的 个数 sum(),注意要group by 要准确的条件。

 select s.user_id,ifnull((sum(if(c.action = 'confirmed',1,0)) / count(c.action)),0) as confirmation_rate from Signups s left join Confirmations c on s.user_id  = c.user_id group by c.user_id

最后的ifnull 是因为这里提示要为0.

但是这样写有个问题,# 如果c.action 没有记录怎么办 ->用avg

 select s.user_id,round(ifnull(avg(c.action = 'confirmed'),0),2) as confirmation_rate from Signups s left join Confirmations c on s.user_id  = c.user_id group by c.user_id

这里为啥avg(c.action = 'confirmed')就能计算出平均成功率是多少呢?我没太理解

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

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

相关文章

Spring系列:Spring如何解决循环依赖

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

LeetCode刷题--- 不同路径 III

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递…

ACES 增强版不丹水稻作物地图(2016-2022 年)

ACES 增强版不丹水稻作物地图&#xff08;2016-2022 年&#xff09; 用于改善粮食安全决策的 2016-2022 年年度作物类型稻米地图仍然是不丹的一项挑战。这些地图是与不丹农业部和 SERVIR 合作开发的。通过专注于发展不丹的科学、技术、工程和数学 (STEM)&#xff0c;我们共同开…

HTML进阶

列表、表格、表单 文章目录 列表、表格、表单01-列表无序列表有序列表定义列表 02-表格表格结构标签-了解合并单元格 03-表单input 标签input 标签占位文本单选框上传文件多选框下拉菜单文本域label 标签按钮 04-语义化无语义的布局标签有语义的布局标签 05-字符实体 01-列表 …

uni-app引入vant表单(附源码)

新建项目 下载安装vant npm i vant main.js引入 import { Form } from vant; import { Field } from vant;Vue.use(Form); Vue.use(Field);代码引入 <van-form submit"onSubmit"><van-fieldclass"rePwd"v-model"username"name"请…

ES应用_ES实战

依靠知识库使用es总结一些使用技巧。 1 快速入门 ES是将查询语句写成类似json的形式&#xff0c;通过关键字进行查询和调用。 1.1 创建 下面创建了一个主分片为5&#xff0c;副本分片为1的ES结构。ES本身是一种noschema的结构&#xff0c;但是可以通过指定mapping编程schema的…

C# 给方形图片切圆角

写在前面 在有些场景中&#xff0c;给图片加上圆角处理会让视觉效果更美观。 代码实现 /// <summary>/// 将图片处理为圆角/// </summary>/// <param name"image"></param>/// <returns></returns>private Image DrawTranspar…

Java实现树结构(为前端实现级联菜单或者是下拉菜单接口)

Java实现树结构&#xff08;为前端实现级联菜单或者是下拉菜单接口&#xff09; 我们常常会遇到这样一个问题&#xff0c;就是前端要实现的样式是一个级联菜单或者是下拉树&#xff0c;如图 这样的数据接口是怎么实现的呢&#xff0c;是什么样子的呢&#xff1f; 我们可以看看 …

基于 LangChain + GLM搭建知识本地库

一种利用 langchain 思想实现的基于本地知识库的问答应用&#xff0c;目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 受GanymedeNil的项目document.ai和AlexZhangji创建的ChatGLM-6B Pull Request启发&#xff0c;建立了全流程可使用开源模…

网络安全-真实ip获取伪造与隐藏挖掘

目录 真实ip获取应用层网络层网络连接TOAproxy protocol ip伪造应用层网络层TOA攻击proxy protocol 隐藏代理 挖掘代理多地ping历史DNS解析记录国外主机解析域名网站RSS订阅网络空间搜索引擎 总结参考 本篇文章学习一下如何服务如何获取真实ip&#xff0c;隐藏自己的ip&#xf…

【AI】人类视觉感知特性与深度学习模型(1/2)

目录 一、关于人类视觉感知 1.1 视觉关注 1.自上而下&#xff08;Top-down&#xff09;的视觉关注 ​编辑 2.自下而上&#xff08;Bottom-up&#xff09;的视觉关注 3.区别和记忆点 1.2 视觉掩盖 1.常见的视觉掩盖效应 2.恰可识别失真&#xff08;Just Noticeable Dif…

DsPdf:GcPdf 7.0 for NET Crack

DsPdf:GcPdf 7.0 用于全面文档控制的功能丰富的 C# .NET PDF API 库 PDF 文档解决方案&#xff08;DsPdf&#xff0c;以前称为 GcPdf&#xff09;可让您快速、高效地生成文档&#xff0c;且无需依赖任何内存。 在 C# .NET 中生成、加载、编辑和保存 PDF 文档 支持多种语言的全…