leetcode数据库题第四弹

这篇具有很好参考价值的文章主要介绍了leetcode数据库题第四弹。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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/

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

leetcode数据库题第四弹
这为了验证官方题解,其他人的题解,以及拉用例,错了一地啊。

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)

leetcode数据库题第四弹
这个指令的用时其实还是很让老顾诧异的。

那就换个写法好了

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% 以上了。掌握好关联查询,才是数据库查询的第一个热点。

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

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

leetcode数据库题第四弹文章来源地址https://www.toymoban.com/news/detail-477799.html

到了这里,关于leetcode数据库题第四弹的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库第四章习题_完整版

    1.1 请考虑以下 SQL 查询,该查询旨在查找 2017 年春季讲授的所有课程的标题以及教师的姓名的列表。 请问这个查询有什么问题? 首先 section 中并没有我们需要使用到的属性,所以这里 “natural join setion” 是多余的。 其次,更重要的一点是:在 instructor 关系和 course 关系中都有

    2024年02月07日
    浏览(26)
  • 第四章——数据库的安全性

    问题的提出:数据库安全性产生的原因 数据库的一大特点是共享性 数据共享必然带来数据库安全性问题 数据库系统中的数据共享不能是无条件的共享 数据库的安全性是指保护数据库以防止不合法的使用所造成的的数据泄露、更改或破坏 系统安全保护措施是否有效是数据库

    2023年04月08日
    浏览(30)
  • MySQl数据库第四课-------------努力------努力------努力

     欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com ——————————————————————————————————          sudo          whoami          who                  exit                   reboot、shutdown            

    2024年02月13日
    浏览(37)
  • 《数据库原理MySQL》第四次上机实验

    一、连接查询 1.查询女学生的学生学号及总成绩 2.查询李勇同学所选的课程号及成绩 3.查询李新老师所授课程的课程名称 4.查询女教师所授课程的课程号及课程名称 5.查询姓“王”的学生所学的课程名称 6.查询选修“数据库”课程且成绩在 80 到 90 之间的学生学号及成绩 7.查

    2024年02月05日
    浏览(35)
  • 数据库三大范式、BC范式、第四范式

    为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 第一范式是最基本的范式。 如果数据库表中的所有字段

    2024年01月18日
    浏览(33)
  • 【软考数据库】第四章 操作系统知识

    目录 4.1 进程管理 4.1.1 操作系统概述 4.1.2 进程组成和状态 4.1.3 前趋图 4.1.4 进程同步与互斥 4.1.5 进程调度 4.1.6 死锁 4.1.7 线程 4.2 存储管理 4.2.1 分区存储管理 4.2.3 分页存储管理 4.2.4 分段存储管理 4.2.5 段页式存储管理 4.3 设备管理 4.3.1 设备管理概述 4.3.2 I/0软件 4.3.3 设

    2024年02月06日
    浏览(43)
  • 数据库原理第六章课后题答案(第四版)

    一、选择题 1. B    2. C    3. C    4. A    5. C 6. B    7. C    8. B    9. D    10. C 11. D   12. B   13. B   14. D   15. B 16. B   17. C 二、填空题 数据库的结构设计、数据库的行为设计 新奥尔良法 分析和设计阶段、实现和运行阶段 需求分析 概念结构设计 自顶向下、自底向

    2024年02月01日
    浏览(37)
  • 面试数据库八股文五问五答第四期

    作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的! ⭐点赞⭐收藏⭐不迷路!⭐ 1)什么情况下 mysql 会索引失效? 不使用索引列进行查询:当查询条件不包含索引列时,MySQL无法使用索引进行快速查找,而会进行全表扫描,导致索引失效。 使用函

    2024年02月04日
    浏览(29)
  • 第四章 文档数据库 (DocDB) 简介 - JSON 特殊值

    JSON 特殊值只能在 JSON 对象和 JSON 数组中使用。它们与相应的 ObjectScript 特殊值不同。 JSON 特殊值不带引号指定(引号内的相同值是普通数据值)。它们可以用大写和小写字母的任意组合指定;它们全部存储为小写字母。 JSON 通过使用 null 特殊值来表示值的缺失。由于文档数据

    2024年02月20日
    浏览(34)
  • 开源数据库MYSQL DBA运维实战 第四章 集群

    mysql复制技术 集群目的 负载均衡:解决高并发 高可用HA:服务可用性 远程灾害:数据有效性 图示 类型 M M-S M-S-S... M-M M-M-S-S 原理图示 图示 概念 1.在主库上把数据更改 (DDL DML DCL) 记录到二进制日志 (BinaryLog) 中。 2.备库/0线程将主库上的日志复制到自己的中继日志 ( Relay Log) 中

    2024年02月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包