leetcode数据库题第四弹

news2024/11/26 13:45:24

leetcode数据库题第四弹

  • 619. 只出现一次的最大数字
  • 620. 有趣的电影
  • 626. 换座位
  • 627. 变更性别
  • 1045. 买下所有产品的客户
  • 1050. 合作过至少三次的演员和导演
  • 1068. 产品销售分析 I
  • 1070. 产品销售分析 III
  • 1075. 项目员工 I
  • 1084. 销售分析III
  • 小结

619. 只出现一次的最大数字

https://leetcode.cn/problems/biggest-single-number/

简单的聚合,用group 加 having 轻松完成一拖三

select max(num) num from (select num from mynumbers group by num having(count(0)=1)) a

CSDN 文盲老顾的博客,https://blog.csdn.net/superwfei

620. 有趣的电影

https://leetcode.cn/problems/not-boring-movies/

嗯,oracle 居然不支持 % 运算求余

# oracle 
select * 
from cinema 
where description <> 'boring' and mod(id,2) = 1
order by rating desc
# mysql && mssql
select * 
from cinema 
where description <> 'boring' and id % 2 = 1
order by rating desc

626. 换座位

https://leetcode.cn/problems/exchange-seats/

这个题目有问题,在力扣官方修正之前,这个题目没必要做了。为什么说有问题呢,看截图就知道了。
在这里插入图片描述
在这里插入图片描述
瞧瞧,输入信息一致,期待结果却不同。如果没有这个问题,老顾拉用例也能给他混个 ac了。

在这里插入图片描述
这为了验证官方题解,其他人的题解,以及拉用例,错了一地啊。

627. 变更性别

https://leetcode.cn/problems/swap-salary/

这个是 update 里用 case when 来实现。

# mysql && mssql
update salary
set sex = (case when sex = 'f' then 'm' else 'f' end)

1045. 买下所有产品的客户

https://leetcode.cn/problems/customers-who-bought-all-products/

group 加 having 加子查询即可

# mysql && oracle
select distinct customer_id 
from customer
group by customer_id
having(count(distinct product_key) = (select count(0) from product))

这个指令在 mssql 是可用的,不知道为什么会出现超时,所以换个写法

select customer_id 
from (
    select customer_id,count(0) as cnt 
    from (
        select distinct customer_id,product_key
        from customer
    ) a
    group by customer_id
) a
inner join (
    select count(0) as cnt from product
) b on a.cnt=b.cnt

1050. 合作过至少三次的演员和导演

https://leetcode.cn/problems/actors-and-directors-who-cooperated-at-least-three-times/

简单的 having 判断一下就好

select actor_id,director_id
from actordirector
group by actor_id,director_id
having(count(0)>2)

在这里插入图片描述
这个指令的用时其实还是很让老顾诧异的。

那就换个写法好了

select distinct actor_id,director_id
from (
    select actor_id,director_id
        ,row_number() over(partition by actor_id,director_id order by timestamp) rid
    from actordirector
) a
where rid>2

1068. 产品销售分析 I

https://leetcode.cn/problems/product-sales-analysis-i/

还以为有行列转换需求,结果发现,就是 left join 的内容。

select product_name,year,price 
from sales s
left join product p on s.product_id=p.product_id

1070. 产品销售分析 III

https://leetcode.cn/problems/product-sales-analysis-iii/

这个题目,用排名函数很简单就能完成,不过需要注意,可能某产品在某一年有多次销售,所以不能使用 row_number ,要用 rank 或 dense_rank。老顾开始没有注意这个问题,一提交,结果是错误。。。郁闷咯。

select product_id,year first_year,quantity,price 
from (
    select s.*,rank() over(partition by product_id order by year) rid
    from sales s
) a
where rid=1
order by sale_id

用别名的原因是,oracle 必须有别名,才能追加计算列。

当然,这个题目也有用 group + min(year) inner join 原表的方式来实现的办法,老顾就不写了。

1075. 项目员工 I

https://leetcode.cn/problems/project-employees-i/

分组求平均,这部分通用,然后,保留两位小数,这个问题需要各自解决了。

# oracle && mysql
select p.project_id,round(avg(e.experience_years),2) average_years 
from project p
left join employee e on p.employee_id=e.employee_id
group by p.project_id
# mssql
select p.project_id,convert(decimal(38,2),avg(e.experience_years*1.0)) average_years 
from project p
left join employee e on p.employee_id=e.employee_id
group by p.project_id

sqlserver 居然有超时的风险,然后发现 convert(float) 得到的结果,因精度问题,产生了不同的结果,只好老老实实的用 decimal 了

# mssql
select p.project_id,round(avg(convert(decimal(16,2),e.experience_years)),2) average_years 
from project p
left join employee e on p.employee_id=e.employee_id
group by p.project_id
order by 1

1084. 销售分析III

https://leetcode.cn/problems/sales-analysis-iii/

日期类型数据计算,各自有各自的写法。

# mssql
select product_id,product_name 
from product p
where exists(select 1 from sales where product_id=p.product_id and sale_date between '2019-1-1' and '2019-3-31')
and not exists(select 1 from sales where product_id=p.product_id and (sale_date < '2019-1-1' or sale_date>'2019-3-31'))

发现用 exists 和 not exists 速度有点慢,有超时风险,换个写法,直接一拖三。

select p.product_id,p.product_name 
from product p
inner join sales s on p.product_id=s.product_id
group by p.product_id,p.product_name 
having min(sale_date) >= '2019-1-1' and max(sale_date) < '2019-4-1'

小结

又是十个数据库题目,按顺序做下来,除了中间有一个用例错误的没有通过,其他还是没什么歧义的,大部分指令都能一拖三。

本次10个题目,有一半用到了分组聚合,熟悉一下这些题目,以后在工作中碰到了,也不会抓瞎了。以老顾实际在工作中碰到的情况,实际需要用 group 的地方并不多,多数都是统计数据才需要用到。

但是关联查询则用的太多太多了,毕竟为了减少数据的重复录入和数据不一致的情况,多数数据库结构,至少符合三范式要求,所以关联查询是不可避免的一个重头内容。

left join、right join、inner join 这三个使用的频率,基本上占日常业务的90% 以上了。掌握好关联查询,才是数据库查询的第一个热点。

至于说这些题目,有时候有超时风险,速度慢效率低,那是因为没有任何辅助优化措施,下次再碰到有超时风险的题目,老顾就直接建立索引,看看这些题目是否能支持起来。

好了,这次刷题就到这里,我们下次再见。

在这里插入图片描述

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

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

相关文章

MySQL的JDBC编程详解

1.JDBC编程概念 在实际项目中&#xff0c;我们对于数据库的操作大部分是通过代码来完成的&#xff0c;各种数据库在开发的时候&#xff0c;都会提供一组编程接口API。所以不同公司使用不同的数据库软件&#xff0c;那么程序员学习成本是非常大的&#xff0c;因为要学习不同数据…

超好用的5款软件,每一款都让你爱不释手

分享爱&#xff0c;分享时光&#xff0c;分享精彩瞬间&#xff0c;大家好&#xff0c;我是互联网的搬运工&#xff0c;今天继续给大家带来几款好用的软件。 1.GIF录制——LICEcap ​ LICEcap是一款用于录制屏幕为GIF动画的工具。它可以让你用一个可调整的窗口来捕捉你的屏幕上…

2023年前端面试高频考点HTML5+CSS3

目录 浏览器的渲染过程⭐⭐⭐ CSS 、JS 阻塞 DOM 解析和渲染 回流&#xff08;重排&#xff09;和重绘⭐⭐ 选择器 ID选择器、类选择器、标签选择器&#xff08;按优先级高到低排序&#xff09;⭐⭐ 特殊符号选择器&#xff08;&#xff1e;,,~&#xff0c;空格&#xff0…

【JavaEE】网络编程之TCP套接字

目录 1、TCP套接字 1.1、ServerSocket 常用API 1.2、Socket 常用API 2、基于TCP套接字实现一个TCP回显服务器 2.1、服务器端代码 2.2、客户端代码 2.3、解决服务器不能同时和多个客户端建立链接的问题 3、基于TCP socket 写一个简单的单词翻译服务器 1、TCP套接字 T…

【中文编程】青语言

【引言】 青语言主页&#xff1a;https://qingyuyan.cn 青语言文档&#xff1a;https://doc.qingyuyan.cn 青语言社区&#xff1a;https://forum.qingyuyan.cn 青语言仓库&#xff1a;https://gitee.com/NjinN/Qing 长久以来&#xff0c;中文编程一直是开发者社区中争议不断的…

opencv读写png

[1] 测试了怎么手动加 alpha 通道设置透明度后&#xff0c;用 PIL.Image 存 png&#xff0c;通道顺序是 RGBA。这里测试用 opencv 读、写 3、4 通道的 png。 png 可以只存 3 通道的&#xff0c;即不要 alpha&#xff0c;也可以加上 alpha。而无 alpha 时 opencv 的通道顺序是 …

微信视频号加强打击肖像授权侵权短视频

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 视频号安全中心发布公告称&#xff1a;视频号将打击肖像权和侵权的短视频&#xff0c;并在7月份上线“视频授权功能”。 5月份视频号已经下架了3万多条视频&#xff0c;1万多个帐号减少推荐。你看3…

Spring框架-面试题核心概念

目录 1.Spring框架的作用是什么&#xff1f; 2. 什么是DI&#xff1f; 3.什么是AOP&#xff1f; 4.Spring常用注解 5.Spring中的设计模式 6.Spring支持的几种bean的作用域 7.Spring中Bean的生命周期&#xff1f; 8.Spring中的事务管理 9.Spring中的依赖注入方式有几种 10.Sprin…

SpringBoot项目热部署设置

目录 1.设置热部署的好处 2.设置热部署的坏处 3.设置热部署的流程 4.关闭热部署功能 1.设置热部署的好处 Spring Boot 热部署的主要好处是在开发过程中提高了开发效率和体验。它让开发者在修改代码后无需手动重启应用程序&#xff0c;而是可以快速自动重新加载应用程序&…

【新版】系统架构设计师 - 信息安全技术基础知识

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 信息安全技术基础知识考点摘要信息安全基础知识信息安全系统的组成框架信息加密技术对称加密&#xff08;共享密钥&#xff09;非对称加密&#xff08;公开密钥&#xff09;信息摘要数字签名数字信…

el-upload 多文件依次上传(防抖 + 递归)

需求描述 多图上传组件&#xff0c;1-9 张图选择完文件后自动上传&#xff0c;不需要上传按钮来进行手动上传 难点 接口有两种&#xff0c;多图集合上传接口 uploadImgs、单图上传接口 uploadImg 使用 uploadImgs 接口&#xff0c;参数为图片集合 fileList&#xff0c;但是缺…

Spring架构篇--2.7.4 远程通信基础--Netty原理--bind实现客户端acceptread事件处理

前言&#xff1a;本文在Netty 服务端已经实现NioServerSocketChannel 管道的初始化并且绑定了端口后&#xff0c;继续对客户端accept&read事件如何处理进行探究&#xff1b; 1 对客户端accept&read事件的触发&#xff1a; 从之前的ServerBootstrap 的bind 方法中似乎…

JMeter接口测试新思路——灵活使用BeanShell

目录 前言&#xff1a; BeanShell的简介 调用Java方法 执行Class文件 结合实际案例 总结 前言&#xff1a; 在JMeter进行接口测试时&#xff0c;我们可能会遇到需要调用Java方法或者执行Java代码的情况&#xff0c;这时候我们可以使用BeanShell来实现。BeanShell是一个类…

QuintoAndar 如何提高转化率

QuintoAndar 如何提高转化率 ——求关注、求点赞、求分享&#xff0c;二毛拜谢。 QuintoAndar 如何通过提高页面性能来提高每次会话的转化率和页面数 一个专注于优化 Core Web Vitals 并迁移到 Next.js 的项目使转换率提高了 5%&#xff0c;每个会话的页面增加了 87%。 Quint…

07.JavaWeb-Vue+elementUI

1.Vue 功能替代JavaScript和jQuery&#xff0c;基于JavaScript实现的前端框架 1.1配置Vue 1.1.1引入vue库 方法一&#xff1a;通过cdn链接引入最新版本的vue&#xff08;可能会慢些&#xff09; <head><script src"https://cdn.jsdelivr.net/npm/vue">…

基于yolov5开发构建道路路面病害检测识别系统——以捷克、印度、日本三国城市道路实况场景数据为例,开发对比分析模型并分析对应性能

城市道路病害检测是最近比较热门的一个任务领域&#xff0c;核心就是迁移深度学习目前已有的研究成果来实现实时城市道路路面病害的检测识别分析&#xff0c;在我之前的很多博文中都有做过类似桥梁、大坝、基建、隧道等水泥设施裂缝裂痕等目标检测相关的项目&#xff0c;除此之…

利用powershell脚本进行内网渗透

powershell知识点 ps1是powershell脚本的拓展名&#xff0c;就相当于cmd的.bat脚本&#xff0c;但是他更加强大。 获取版本信息 get-host #查看powershell的版本信息$psversiontable #查看powershell的版本信息执行策略 PowerShell 执行策略是一项安全功能&#xff0c;用于控…

softmax之温度系数

1.数学表示 这是传统的softmax&#xff1a; q i e x p ( z i ) ∑ j e x p ( z j ) q_i \frac{exp(z_i)}{\sum_jexp(z_j)} qi​∑j​exp(zj​)exp(zi​)​ 或者写&#xff1a; q i e x p ( z i ) / 1.0 ∑ j e x p ( z j / 1.0 ) q_i \frac{exp(z_i)/1.0}{\sum_jexp(z_j/…

《LCHub低代码指南》:ChatGPT会取代低代码开发平台吗?

目录 一、低代码开发平台的优势 1. 提高开发效率 2. 降低开发成本 3. 提高应用程序的质量 二、ChatGPT的优势 三、ChatGPT是否会取代低代码开发平台 四、结论 随着数字化时代的到来,低代码开发平台已经成为了企业数字化转型的重要工具之一。然而,随着人工智能技术的不…

提升教学质量,监督教室课堂秩序?这招小白也能轻松搞定

在当今快速发展的教育领域&#xff0c;提高教学质量和监督教师的工作表现是学校和教育机构的重要任务之一。 传统的巡课方式存在许多限制&#xff0c;如耗时、人力成本高以及数据收集和分析的困难等。为了应对这些挑战&#xff0c;越来越多的学校和教育机构转向在线巡课系统&am…