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

news2024/11/26 21:48:52

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.coloradmin.cn/o/1349568.html

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

相关文章

解决npm,pnpm,yarn等安装electron超时等问题

我在安装electron的时候&#xff0c;出现了超时等等各种问题&#xff1a; &#xff08;RequestError: connect ETIMEDOUT 20.205.243.166:443&#xff09; npm yarn&#xff1a;Request Error: connect ETIMEDOUT 20.205.243.166:443 RequestError: socket hang up npm ER…

ThreadLocal共享变量

一、ThreadLocal 我们知道多线程访问同一个共享变量时&#xff0c;会出现线程安全问题&#xff0c;为了保证线程安全开发者需要对共享变量的访问操作进行适当的同步操作&#xff0c;如加锁等同步操作。 除此之外&#xff0c;Java提供了ThreadLocal类&#xff0c;当一个共享变…

python实现Ethernet/IP协议的客户端(三)

Ethernet/IP是一种工业自动化领域中常用的网络通信协议&#xff0c;它是基于标准以太网技术的应用层协议。作为工业领域的通信协议之一&#xff0c;Ethernet/IP 提供了一种在工业自动化设备之间实现通信和数据交换的标准化方法。python要实现Ethernet/IP的客户端&#xff0c;可…

Spring Cloud Gateway + Nacos 灰度发布

前言 本文将会使用 SpringCloud Gateway 网关组件配合 Nacos 实现灰度发布&#xff08;金丝雀发布&#xff09; 环境搭建 创建子模块服务提供者 provider&#xff0c;网关模块 gateway 父项目 pom.xml 配置 <?xml version"1.0" encoding"UTF-8"?…

数据结构OJ实验9-图存储结构和遍历

A. 图综合练习--构建邻接表 题目描述 已知一有向图&#xff0c;构建该图对应的邻接表。 邻接表包含数组和单链表两种数据结构&#xff0c;其中每个数组元素也是单链表的头结点&#xff0c;数组元素包含两个属性&#xff0c;属性一是顶点编号info&#xff0c;属性二是指针域n…

数据结构期末复习(fengkao课堂)

学习数据结构时&#xff0c;以下建议可能对您有所帮助&#xff1a; 理解基本概念&#xff1a;首先&#xff0c;确保您理解数据结构的基本概念&#xff0c;例如数组、链表、栈、队列、树、图等。了解它们的定义、特点和基本操作。 学习时间复杂度和空间复杂度&#xff1a;了解如…

【LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置 | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

simulink代码生成(八)——应用串口输入的16进制数

1、串口输入的是16进制数&#xff0c;如何将其应用到算法中&#xff1f; 串口输入的数据是16进制数&#xff1b;要解决这个问题必须要理解matlab的数据类型&#xff1b;数据类型一般用来标明数据的系列参数&#xff0c;包含有精度、动态范围、性能和存储的资源。模型会默认使…

你好2024!

大家好&#xff0c;我是小悟 2024年1月1日&#xff0c;新年的第一天&#xff0c;阳光明媚&#xff0c;空气中弥漫着希望和新的开始的气息。在这个特别的日子里&#xff0c;大家纷纷走出家门&#xff0c;迎接新年的到来。 街道上&#xff0c;熙熙攘攘的人群中&#xff0c;有孩…

开放原子训练营(第四季)TobudOS——TobudOS内核移植(keil版)

前言 12月份参加了开放原第四季线下活动&#xff0c;觉得很有意义。通过这篇博文&#xff0c;记录一下这次活动进行的移植TobudOS内核的过程&#xff0c;下面就让我们开始吧。 开发板介绍 本次使用的开发板型号为STM32H750&#xff0c;当然了&#xff0c;其他型号的开发版也…

Django 实现Web便签

效果图 会用到的知识 目录结构与URL路由注册request与response对象模板基础与模板继承ORM查询后台管理 实现步骤 1. terminal 输入 django-admin startapp the_10回车 2. 注册&#xff0c; 在 tutorial子文件夹settings.py INSTALLED_APPS 中括号添加 "the_10" IN…

C++日期类的实现

前言&#xff1a;在类和对象比较熟悉的情况下&#xff0c;我们我们就可以开始制作日期表了&#xff0c;实现日期类所包含的知识点有构造函数&#xff0c;析构函数&#xff0c;函数重载&#xff0c;拷贝构造函数&#xff0c;运算符重载&#xff0c;const成员函数 1.日期类的加减…

pyqt5用qtdesign设计页面时,去掉页面的空白界面、边框和标题栏

前言 Windows默认的标题栏有时候自己觉得不太美观&#xff0c;就想自己设计一个&#xff0c;然后把默认的去掉&#xff0c;并且把长方形的边框和多余的空表界面去掉&#xff0c;就是下图中圈出来的区域&#xff1a; 去掉之后的效果如图&#xff1a; 这样我们就可以自定义窗…

SpringBoot + Vue 抖音全平台项目

简介 本项目是一个短视频平台&#xff0c;拥有热度排行榜&#xff0c;热门视频&#xff0c;兴趣推送&#xff0c;关注推送&#xff0c;内容审核等功能。 源码下载 网盘 (访问密码: 8418) 登录/注册 首页 创作中心 架构设计 上传视频业务流程 视频推送流程 1.用户订阅分类后…

OSPFv2 LSA类型

OSPFv2需要了解的6种LSA&#xff0c;分别是&#xff1a;1类LSA、2类LSA、3类LSA、4类LSA、5类LSA、7类LSA。 我们先了解一下LSA的组成&#xff0c;LSA由LSA头部和LSA内容组成&#xff0c;其中LSA头部是每一类LSA都相同的&#xff0c;有Type&#xff08;LSA的类型&#xff09;、…

iMazing 2 .17.16最新官方中文版免费下载安装激活

iMazing 2 .17.16最新版是一款帮助用户管理IOS手机的应用程序&#xff0c;iMazing2最新版能力远超iTunes提供的终极的iOS设备管理器。IMazing与你的iOS设备(iPhone、 iPad或iPod)相连&#xff0c;使用起来非常的方便。作为苹果指定的iOS设备同步工具。 mazing什么意思 iMazing…

软件推荐:MobaXterm

介绍 MobaXterm 是远程计算的终极工具箱&#xff0c;它提供了几乎所有重要的远程网络工具&#xff0c;SSH、RDP、FTP、VNC&#xff0c;只要你能想到的&#xff0c;都可以在MobaXterm中找到。除了海量协议外&#xff0c;MobaXterm 还支持安装额外的插件来扩展其功能。 软件官网…

深度学习核心技术与实践之自然语言处理篇

非书中全部内容&#xff0c;只是写了些自认为有收获的部分。 自然语言处理简介 NLP的难点 &#xff08;1&#xff09;语言有很多复杂的情况&#xff0c;比如歧义、省略、指代、重复、更正、倒序、反语等 &#xff08;2&#xff09;歧义至少有如下几种&#xff1a; …

Linux学习第49天:Linux块设备驱动实验(一):Linux三大驱动之一

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本章学习Linux三大驱动之一的块设备驱动&#xff0c;主要应用场景为存储设备。 本章的思维导图如下&#xff1a; 一、什么是块设备 块设备---存储设备 以块为单位…

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现

经典目标检测YOLO系列(一)复现YOLOV1(3)正样本的匹配及损失函数的实现 之前&#xff0c;我们依据《YOLO目标检测》(ISBN:9787115627094)一书&#xff0c;提出了新的YOLOV1架构&#xff0c;并解决前向推理过程中的两个问题&#xff0c;继续按照此书进行YOLOV1的复现。 经典目标…