leetcode 数据库题 196,197,262,511,550,570

news2025/1/11 9:11:50

leetcode 数据库题第二弹

  • 196. 删除重复的电子邮箱
  • 197. 上升的温度
  • 262. 行程和用户
  • 511. 游戏玩法分析 I
  • 550. 游戏玩法分析 IV
  • 570. 至少有5名直接下属的经理
  • 577. 员工奖金
  • 小结

196. 删除重复的电子邮箱

题目地址:https://leetcode.cn/problems/delete-duplicate-emails/

嗯。。。。这个是考 delete 指令的,因为 oracle 不熟,所以单独写了个指令,其他的用排名函数完成。对 group 和 min 组合,结合 not in 也可以完成。

# 一拖三
delete from person
where id not in (
    select min(id) from person
    group by email
)
# mysql & mssql
delete from person
where id in (
    select id from (
        select *,row_number() over(partition by email order by id) rid
        from person
    ) a
    where rid>1
)

在这里插入图片描述

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

197. 上升的温度

题目地址:https://leetcode.cn/problems/rising-temperature/

这次就是考日期计算方式,每个数据库都不一样

# oracle
select a.id
from weather a 
where exists(select 1 
    from weather b 
    where a.recordDate-b.recordDate = 1 and a.temperature>b.temperature
)
# mysql
select a.id
from weather a 
where exists(select 1 
    from weather b 
    where datediff(a.recordDate,b.recordDate) = 1 and a.temperature>b.temperature
)
# mssql
select a.id
from weather a 
where exists(select 1 
    from weather b 
    where datediff(d,a.recordDate,b.recordDate) = -1 and a.temperature>b.temperature
)

在这里插入图片描述

262. 行程和用户

题目地址:https://leetcode.cn/problems/trips-and-users/

考点是分组和聚合,困难评价名不符实。哦,还有个保留两位小数。

# mssql
select request_at Day,convert(decimal(16,2),sum(case when status<>'completed' then 1.0 else 0.0 end) / count(0)) [cancellation Rate] 
from trips t
left join users c on t.client_id=c.users_id
left join users d on t.driver_id=d.users_id
where c.banned='No' and d.banned='No' and request_at between '2013-10-01' and '2013-10-03'
group by request_at
# mysql
select request_at Day,round(sum(case when status<>'completed' then 1.0 else 0.0 end) / count(0),2) `cancellation Rate` 
from trips t
left join users c on t.client_id=c.users_id
left join users d on t.driver_id=d.users_id
where c.banned='No' and d.banned='No' and request_at between '2013-10-01' and '2013-10-03'
group by request_at
# oracle
select request_at Day,cast(sum(case when status<>'completed' then 1.0 else 0.0 end) / count(0) as numeric(4,2)) "Cancellation Rate"
from trips t
left join users c on t.client_id=c.users_id
left join users d on t.driver_id=d.users_id
where c.banned='No' and d.banned='No' and request_at between '2013-10-01' and '2013-10-03'
group by request_at

还以为 oracle 不进行补零会失败,没想到通过了
在这里插入图片描述

511. 游戏玩法分析 I

题目地址:https://leetcode.cn/problems/game-play-analysis-i/

额。。。。排名函数还是很好用的,然后输出只输出日期即可。

# oracle
select player_id,to_char(event_date,'YYYY-mm-DD') first_login 
from (
    select a.*,row_number() over(partition by player_id order by event_date) rid 
    from activity a
) a
where rid=1
# mssql
select player_id,convert(date,event_date) first_login 
from (
    select a.*,row_number() over(partition by player_id order by event_date) rid 
    from activity a
) a
where rid=1
# 一拖三
select player_id,min(event_date) first_login
from activity
group by player_id

550. 游戏玩法分析 IV

题目地址:https://leetcode.cn/problems/game-play-analysis-iv/

嗯。。。游戏玩法分析2和3都是会员题目,老顾是看不到的,看别人题解吧。

这个4的题目要考啥,老顾有点拿不准,是 group 吗?还是要考子查询?

#mssql
with t as (
    select player_id id,min(event_date) mn,1 tp 
    from activity
    group by player_id
)
select convert(decimal(4,2),(
    select convert(float,count(0))
    from t b
    inner join activity a on b.id=a.player_id and datediff(d,b.mn,a.event_date)=1
) / (select count(0) from t)) fraction
# mysql
with t as (
    select player_id,min(event_date) mn 
    from activity
    group by player_id
)
select round(sum(case when exists(
    select 1 
    from activity 
    where player_id=a.player_id and datediff(event_date,a.mn)=1
) then 1 else 0 end) / count(0),2) as fraction 
from t a
# oracle
select round(c1.c1 / c2.cnt,2) fraction
from (
    select count(0) as c1
    from (
        select player_id id,min(event_date) mn 
        from activity
        group by player_id
    ) b
    inner join activity a on a.player_id=b.id and a.event_date-b.mn = 1
) c1,(
    select count(0) cnt
    from (
        select player_id 
        from activity
        group by player_id
    ) x
) c2 

是实在不知道 oracle 怎么直接用子查询结果作为一个列哎使用 ,只好用笨办法来实现一下。
在这里插入图片描述

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

题目地址:https://leetcode.cn/problems/managers-with-at-least-5-direct-reports/

这个题目,不管是用 row_number 协助,还是用 group 协助,都一样简单,还是用group吧,可以一拖三。而且有 having 辅助,比row_number 简单一些。

select e.name 
from (
    select managerid 
    from employee 
    group by managerid
    having(count(0)>4)
) a
inner join employee e on a.managerid=e.id

在这里插入图片描述

577. 员工奖金

题目地址:https://leetcode.cn/problems/employee-bonus/

又一个基础题目,这次考 null 情况和 left join。

#mysql
select name,bonus 
from employee e
left join bonus b on b.empId=e.empId
where ifnull(bonus,0)<1000
# mssql
select name,bonus 
from employee e
left join bonus b on b.empId=e.empId
where isnull(bonus,0)<1000
# oracle
select name,bonus 
from employee e
left join bonus b on b.empId=e.empId
where nvl(bonus,0)<1000

可以看到,业务逻辑完全相同,仅仅是在处理 null 时,使用了各自数据库的特定函数罢了。

小结

又刷了几个数据库题目,无奈的是老顾没有会员,所以有些题目就跳过了。还有就是,题目序号开始不连续了,真就不知道该怎么给文章起标题了。

这次做几个题目,还是算作基础题吧,都没有特别复杂的关联查询和业务逻辑在里面。

本次这几个题目,主要还是一些基础知识点的应用,group,group 加 having,子查询嵌套,保留小数的方式,日期范围的选择、求差之类的,教程里基本都有。

所有的数据库题目,和算法题唯一相同的就是,你需要将需求,转成各种逻辑,但是由于数据库查询逻辑套路就在这里摆着,所以用熟了一个数据库,其他数据库做简单查询还是很容易的。

在做这几个题目的时候,oracle 也弄了一下,因为在群里听到小伙伴说,oracle附加列的时候,其他列都需要加表别名前缀,试了试果然如此。比如第511题,就成功的按照这个方式实现出来了。

但是,还有一个方式的需求没有实现成功,就是用子查询结果,单行单列的结果,作为附加列,然后产生后续计算的方式,没能弄明白到底哪里出问题了,oracle 一直报错。顺便吐槽一下,oracle 报错信息太简陋了,就一个执行出错,啥原因啥反馈都没有了。

最后,对于每个指令在不同的环境下运行的效率问题,老顾表示不想讨论,数据库的优化,尤其是查询优化算是一个大项了,各人有各自的玩法,针对这种公共的,非大量数据集的内容,实在不值得专门考虑优化问题,而且,只要不是特别的交叉关联,一般这种题目也很难超时,能实现逻辑返回正确结果即可,大可不必像算法题一样,几毫秒几毫秒的在那里琢磨。

对于绝大多数数据库来说,都是符合 t-sql 语法规范的,刨去各自数据库自己的函数实现,很多指令其实都能做到一拖三的。对于数据库来说,基本的查询,永远是通用的多于个性的,学好 t-sql 对于数据库转型是很有必要的。当然,要做数据迁移,那仅仅会 t-sql 肯定不够,毕竟,各自的存储过程、自定义函数、自定义类型,实现机制都有差异,没办法全部自动生成迁移代码。

最后的最后,给大家一点小建议,对于数据库指令,也尽可能的保持良好的书写习惯,保持结构化缩进,这样就很容易维护了。另外就是一些奇葩的情况,可以参考老顾以前的文章《SqlDataAdapter.Fill()时超时的一个另类的原因:你的存储过程中有超长的代码或注释吗?》,真就没想到。不过在 stockoverflow 上,倒是看到设置一个什么环境变量,就可以修正这个超长指令异常的问题,但老顾忘记记录下来了.。

在这里插入图片描述

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

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

相关文章

二、服务网关-Gateway

文章目录 一、服务网关1、网关介绍2、Spring Cloud Gateway介绍3、搭建server-gateway模块3.1 搭建server-gateway3.2 修改配置pom.xml3.3 在resources下添加配置文件3.4添加启动类3.5 跨域处理3.5.1 为什么有跨域问题&#xff1f;3.5.2解决跨域问题 3.6服务调整3.7测试 一、服…

chatgpt赋能Python-python_pulp包怎么安装

Python Pulp包的安装方法 如果你正在进行线性规划或整数规划问题的研究或解决&#xff0c;那么Python Pulp包是一个非常实用的工具&#xff0c;它可以快速、高效地解决这些问题。但是&#xff0c;在使用Python Pulp包的过程中&#xff0c;你可能会遇到一些安装问题。本文将介绍…

Http协议网络读卡器Aspx网页Request获取刷卡数据Response回应驱动显示

三种提交方式可自由设置 RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) HttpReader.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebCont…

C/C++ 数据结构设计与应用(四):C++数据压缩与传输:从理论到实践的全景解析

C数据压缩与传输&#xff1a;从理论到实践的全景解析 一、数据压缩的策略与方法 (Strategies and Methods of Data Compression)1.1 数据压缩的基本概念与原理 (Basic Concepts and Principles of Data Compression)1.2 C中的数据压缩技术 (Data Compression Techniques in C)1…

总结vue3 的一些知识点

vue3 支持 jsx 安装依赖 pnpm add vitejs/plugin-vue-jsxvite.config.ts 中引用插件 import { defineConfig } from "vite" import vue from "vitejs/plugin-vue" import vueJsx from "vitejs/plugin-vue-jsx" // https://vitejs.dev/config/ex…

Golang每日一练(leetDay0075) 打家劫舍II、最短回文串

目录 213. 打家劫舍 II House Robber ii &#x1f31f;&#x1f31f; 214. 最短回文串 Shortest Palindrome &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C…

android App外包开发技术难点

在开发android App时需要注意一些技术问题&#xff0c;包括设备兼容、性能优化、安全问题及用户体验&#xff0c;这些问题往往是android App的通用问题&#xff0c;每个android App的项目都有这些问题&#xff0c;今天和大家分享一下这方面的知识&#xff0c;希望对大家有所帮助…

研发工程师玩转Kubernetes——使用环境变量给容器中程序传递参数

在《研发工程师玩转Kubernetes——构建、推送自定义镜像》中&#xff0c;Pod的IP是通过代码获取的 def get_ip():try:s socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.connect((8.8.8.8, 80))ip s.getsockname()[0]finally:s.close()return ip实际我们可以在清单文件中…

python 正则表达式使用总结

re库使用 re.findall import re## 存在匹配的 txt "ai aiThe rain in Spain" x re.findall("ai", txt) print(x) # 没有匹配的 txt "adafda dafasdf" x re.findall("ai", txt) print(x)s中国人adfadsfasfasdfsdaf中国万岁\n pri…

chatgpt赋能Python-python_pythonw

Python和Pythonw——SEO助您成功 Python和Pythonw是两个最广泛使用的编程语言之一。不仅是它们提供了丰富的编程功能和轻松上手的学习曲线&#xff0c;它们还具有出色的SEO优化功能&#xff0c;因为它们是自由和开源的。 Python是什么&#xff1f; Python是一种高级编程语言…

SpringCloud微服务踩坑系列:参数不全造成的空指针

服务一直报500错误&#xff0c;看了一下后台出现了空指针异常 异常如下&#xff1a; java.lang.NullPointerException: null at com.cyf.serviceOrder.service.OrderInfoService.add(OrderInfoService.java:93) ~[classes/:na] at com.cyf.serviceOrder.controller.Or…

chatgpt赋能Python-python_qq群

Python QQ群&#xff1a;学习Python的最佳社区 Python是一个非常流行的编程语言&#xff0c;因其简单易学、可读性高等特点&#xff0c;备受开发人员的青睐。为了交流学习Python&#xff0c;越来越多的人开始组建Python QQ群。本文将介绍Python QQ群的意义、特点和如何找到合适…

深入理解Java虚拟机:JVM高级特性与最佳实践-总结-10

深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践-总结-10 虚拟机类加载机制类加载的过程初始化 类加载器类与类加载器双亲委派模型 虚拟机类加载机制 类加载的过程 初始化 类的初始化阶段是类加载过程的最后一个步骤&#xff0c;前几个类的加载动作里&#xff0c;除了…

Unity 新建你的第一个游戏,以及如何按WASD控制角色运动 (Unity Demo2D)

文章目录 初始化项目新建角色物体游戏资源管理试着导入资源试着管理资源试着使用资源 脚本是啥新建脚本编辑脚本行为逻辑按键检测获取按键移动位置★ 最终代码 (有基础请直接跳到这) 初始化项目 当你打开 Unity Hub&#xff0c;初始化一个 2D 项目&#xff0c;进入了 Unity 编…

人工智能TensorFlow MNIST手写数字识别——训练篇

上期我们分享了CNN的基本结构,本期我们就拿MNIST数据集来训练一下手写数字的数据库,以便我们下期能够使用训练好的模型,来进行手写数字的识别。 分享一下几个可视化网站,可以看到神经网络的识别过程。 http://scs.ryerson.ca/~aharley/vis/conv/ 1、插入MNIST数据集 #利…

Java安全和防护:如何保护Java应用程序和用户数据的安全

第一章&#xff1a;引言 在当今数字化时代&#xff0c;Java已经成为主流的编程语言之一。无论是企业级应用程序还是个人项目&#xff0c;Java应用程序都承载着大量的敏感数据和业务逻辑。然而&#xff0c;随着网络攻击日益猖獗&#xff0c;保护Java应用程序和用户数据的安全变…

Java-API简析_java.lang.Package类(基于JDK1.8)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/130806567 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

什么是 Spring?为什么学它?

前言 欢迎来到本篇文章&#xff01;在这里&#xff0c;我将带领大家快速学习 Spring 的基本概念&#xff0c;并解答两个关键问题&#xff1a;什么是 Spring&#xff0c;以及为什么学习 Spring。 废话少说&#xff0c;下面&#xff0c;我们开始吧&#xff01; Spring 官方文档…

MySQL索引详解(IT枫斗者)

MySQL索引详解 什么是索引 官方介绍索引是帮助MySQL高效获取数据的数据结构。简单来讲&#xff0c;数据库索引就像是书前面的目录&#xff0c;能加快数据库的查询速度。事实上&#xff0c;索引是一种数据结构&#xff0c;用于帮助我们在大量数据中快速定位到我们想要查找的数…

chatgpt赋能Python-python_pyyaml

Python与PYAML的SEO 介绍 在当今以数据为中心的时代&#xff0c;数据的存储、传输和处理出现了许多新的挑战。Python作为一门强大的编程语言&#xff0c;已经成为数据处理的利器。而PYAML则是Python中一款重要的yaml库。 YAML与PYAML YAML&#xff08;YAML Ain’t Markup L…