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

2024-01-01 12:04

本文主要是介绍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')就能计算出平均成功率是多少呢?我没太理解

这篇关于2024-01-01 力扣高频SQL50题目 练习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/559191

相关文章

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

2024/9/8 c++ smart

1.通过自己编写的class来实现unique_ptr指针的功能 #include <iostream> using namespace std; template<class T> class unique_ptr { public:         //无参构造函数         unique_ptr();         //有参构造函数         unique_ptr(