leetcode数据库题第八弹(免费题刷完了)

news2024/11/20 12:32:40

leetcode数据库题第八弹(免费题刷完了)

  • 1757. 可回收且低脂的产品
  • 1789. 员工的直属部门
  • 1795. 每个产品在不同商店的价格
  • 1873. 计算特殊奖金
  • 1890. 2020年最后一次登录
  • 1907. 按分类统计薪水
  • 1934. 确认率
  • 1965. 丢失信息的雇员
  • 1978. 上级经理已离职的公司员工
  • 2356. 每位教师所教授的科目种类的数量
  • 小结

1757. 可回收且低脂的产品

https://leetcode.cn/problems/recyclable-and-low-fat-products/

一脸疑惑啊,这么简单的也可以放到题库里?多条件查询难道不应该是基础中的基础?

select product_id from products where low_fats='Y' and recyclable = 'Y'

想不明白这个题目到底想干嘛。。。。

1789. 员工的直属部门

https://leetcode.cn/problems/primary-department-for-each-employee/

。。。。又是入门题,如果考虑大量数据,那么就把 or 拆成 union 好了,反正在这里老顾懒得写 union。

select employee_id,department_id
from employee e
where primary_flag='Y' or not exists(select primary_flag from employee where employee_id=e.employee_id and department_id<>e.department_id)

在这里插入图片描述
但是,实际看了看用时后,老顾决定还是换个玩法,毕竟这效率不太好。

然后就有看到 mysql 和 mssql 的差异来了,按照 primary_flag 的排序规则居然不一样。。。。汗。。。。

# mssql && oracle
select employee_id,department_id 
from (
    select e.*
        ,row_number() over(partition by employee_id order by primary_flag desc) rid
    from employee e
) a
where rid=1
# mysql
select employee_id,department_id 
from (
    select e.*
        ,row_number() over(partition by employee_id order by primary_flag asc) rid
    from employee e
) a
where rid=1

在这里插入图片描述
oracle 提升不明显,mssql 提升明显啊。

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

1795. 每个产品在不同商店的价格

https://leetcode.cn/problems/rearrange-products-table/

呦,标准的列转行,而且是最简单的那种,没有干扰列。。。。

# mssql
select product_id,store,price 
from products
unpivot(price for store in (store1,store2,store3)) p

先来个 mssql 特有的 unpivot,然后,放个通用的,用 union 搞一搞

select product_id,'store1' store,store1 price 
from products
where store1 is not null
union all
select product_id,'store2' store,store2 price 
from products
where store2 is not null
union all
select product_id,'store3' store,store3 price 
from products
where store3 is not null

1873. 计算特殊奖金

https://leetcode.cn/problems/calculate-special-bonus/

字母开头不是m,且id是单数。。。。好吧,oracle 又和别人不一样

# oracle
select employee_id,(case when mod(employee_id , 2) = 1 and lower(substr(name,1,1))<>'m' then salary else 0 end) bonus
from employees
order by employee_id
# mssql && mysql
select employee_id,(case when employee_id % 2 = 1 and lower(substring(name,1,1))<>'m' then salary else 0 end) bonus
from employees
order by employee_id

1890. 2020年最后一次登录

https://leetcode.cn/problems/the-latest-login-in-2020/

嗯。。。。终于有用到日期函数的地方了?不容易啊。

还是同样的问题,oracle 加 to_char 修饰一下

# mysql && mssql
select user_id,max(time_stamp) last_stamp 
from logins
where year(time_stamp)=2020
group by user_id
# oracle
select user_id,max(time_stamp) last_stamp 
from logins
where to_char(time_stamp,'YYYY')='2020'
group by user_id

当然了,用 row_number 排名函数也是可以的,多套个子查询的问题罢了

1907. 按分类统计薪水

https://leetcode.cn/problems/count-salary-categories/

嗯。。。。这个题目还算有点意思,有超时的风险了,至少老顾的第一版本确实超时了一次

select a.category,ifnull(b.cnt,0) accounts_count 
from (
    select 'Low Salary' category,'l' lv
    union
    select 'Average Salary','a'
    union
    select 'High Salary','h'
) a
left join (
    select lv,count(0) cnt 
    from (
        select a.*,(case when income<20000 then 'l' when income>50000 then 'h' else 'a' end) lv
        from accounts a
    ) a
    group by lv
) b on a.lv=b.lv

然后发现这个题目,用最直接的办法,oracle 表现良好,mysql 其次,至少都没有超时风险,mssql 就一言难尽了

select 'Low Salary' category,count(0) accounts_count 
from accounts
where income < 20000
union all
select 'High Salary' category,count(0) accounts_count 
from accounts
where income > 50000
union all
select 'Average Salary' category,count(0) accounts_count 
from accounts
where income between 20000 and 50000

在这里插入图片描述
而这个指令,在 mssql 居然有很严重的超时风险?

那么,就专门针对 mssql 写一版好了,不考虑通用性,只考虑性能好了。。。。。结果用了将近一个小时,没有把效率提高到安全先以内,任何指令都有超时风险。。。。

最后,老顾把超时的那个数据,扔到自己的服务器上跑了一下。。。嗯,秒出结果。。。。
在这里插入图片描述
但是,这里要说一句但是,10万条数据,老顾扔到数据库里进行临时表建立,用时却不止6秒,平均8秒左右。。。。所以,亲们,不要再去折腾这个题目了,明显这个耗时,是包含数据插入的时间的,所以。。。太坑了,肯定是力扣的mssql版本的数据插入部分有问题!

下边是实测用时记录,10万数据转换用了7687毫秒,查询只用了57毫秒。


 SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

 SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
表 'Worktable'。扫描计数 0,逻辑读取 19 次,物理读取 0 次,预读 0 次,lob 逻辑读取 6715 次,lob 物理读取 0 次,lob 预读 1680 次。

 SQL Server 执行时间:
   CPU 时间 = 4633 毫秒,占用时间 = 7687 毫秒。

(100000 行受影响)
SQL Server 分析和编译时间: 
   CPU 时间 = 89 毫秒,占用时间 = 89 毫秒。

(3 行受影响)
表 '#t__________________________________________________________________________________________________________________000000F4444D'。扫描计数 3,逻辑读取 633 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 执行时间:
   CPU 时间 = 47 毫秒,占用时间 = 57 毫秒。

 SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。

1934. 确认率

https://leetcode.cn/problems/confirmation-rate/

嗯,这个题目比上个题目简单吗?感觉是一样的,不过这次没有大数据集,所以感觉不出来

# mysql && oracle
select s.user_id,round(sum(case when action='confirmed' then 1.0 else 0.0 end) / count(0),2) confirmation_rate 
from signups s
left join confirmations c on s.user_id=c.user_id
group by s.user_id
# mssql
select s.user_id,convert(decimal(5,2),sum(case when action='confirmed' then 1.0 else 0.0 end) / count(0)) confirmation_rate 
from signups s
left join confirmations c on s.user_id=c.user_id
group by s.user_id

1965. 丢失信息的雇员

https://leetcode.cn/problems/employees-with-missing-information/

????两个表,并集一下,然后出现次数为1次的就是有丢失信息的人了。。。。

select employee_id
from (
    select employee_id
    from employees
    union all
    select employee_id
    from salaries
) a
group by employee_id
having(count(0) = 1)
order by employee_id

1978. 上级经理已离职的公司员工

https://leetcode.cn/problems/employees-whose-manager-left-the-company/

逻辑捋一下,条件列清楚就好,一共三个条件

第一,薪水
第二,有领导
第三,领导离职

select e.employee_id
from employees e
left join employees p on e.manager_id=p.employee_id
where e.salary<30000 and e.manager_id is not null and p.employee_id is null
order by e.employee_id

2356. 每位教师所教授的科目种类的数量

https://leetcode.cn/problems/number-of-unique-subjects-taught-by-each-teacher/

额,有过类似的题目啊,不过这次还是稍微有点不一样,貌似数据集大了一些,结果就有了差异

select teacher_id,count(distinct subject_id) cnt
from teacher
group by teacher_id

在这里插入图片描述
那就换个写法好了

select teacher_id,count(0) cnt
from (
    select distinct teacher_id,subject_id
    from teacher
) a
group by teacher_id

在这里插入图片描述

小结

那么,到目前为止,力扣的所有免费的数据库题目就已经刷完了。

当然,这里没有太多的考虑效率问题,除非有超时风险的才会有不同写法。

在数据库中,同样的条件,可以使用的查询方式却可以有很多种方式来达成条件。对于不同的写法,会有不同的执行计划,效率也会产生差异。

对于数据库维护人员来说,先了解自己的指令到底有什么优点,有什么缺点,哪些地方可以通过一些外在手段减低消耗,提高效率,是一个需要长期摸索和尝试的内容。

在这里插入图片描述

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

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

相关文章

WebRTC音视频会议底层支撑技术

WebRTC允许应用使用P2P通信。WebRTC是一个广泛的话题&#xff0c;在本文中&#xff0c;我们将重点讨以下问题。 为什么Web RTC 如此受欢迎&#xff1f; 在P2P连接过程中会发生什么 信号传递 NATs和ICE STUN & TURN服务器 VP9视频编解码器 WebRTC APIs 安全 1.为什…

科技资讯|苹果新专利曝光:手势增强用户的交互体验

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的最新清单&#xff0c;苹果公司获得了一项编号为 US 20230195237 A1 的专利&#xff0c;展示了使用手势导航用户界面的交互体验。 苹果这项专利涉及 iPhone、iPad、Apple Watch 和 Mac&#xff0c;使用屏幕生成组件和…

Typora的安装和授权(2023)

文章目录 1. 文章引言2. Typora的下载3. Typora的安装4. Typora的授权 1. 文章引言 我们在开发的过程中&#xff0c;不可或缺地要使用到markdown文本&#xff0c;支持markdown文本的编辑器有很多&#xff0c;其中Typora便是一款不错的编辑器。 不过&#xff0c;Typora是收费的…

知行之桥EDI系统QA第二期:AS2专题

随着使用知行之桥EDI系统的用户群体日益壮大&#xff0c;在使用过程中&#xff0c;用户可能对系统的工作原理、功能模块和实施过程有一些疑问。近期整理了有关 AS2 的四个常见问题&#xff1a; 1.知行之桥 EDI系统支持AS2 协议的 AES_GCM 算法吗&#xff1f;2.AS2发送文件后收…

C++不知算法系列之计数排序算法的计数之巧

1. 前言 计数排序是较简单的排序算法&#xff0c;其基本思想是利用数组索引号有序的原理。 如对如下的原始数组中的数据(元素)排序&#xff1a; //原始数组 int nums[5]{9,1,7,6,8};使用计数排序的基本思路如下&#xff1a; 创建一个排序数组。数组的大小由原始数组的最大值…

ActiveMQ消息队列的核心概念

文章目录 ActiveMQ消息队列的核心概念1.什么是MQ消息队列2.为什么要使用MQ消息队列3.MQ消息队列的应用场景3.1.异步处理3.2.应用解耦3.3.流量削锋 4.常见的MQ消息队列产品对比 ActiveMQ消息队列的核心概念 1.什么是MQ消息队列 Message Queue消息队列简称MQ&#xff0c;消息队…

NXP i.MX 6ULL工业开发板规格书( ARM Cortex-A7,主频792MHz)

1 评估板简介 创龙科技TLIMX6U-EVM是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的评估板&#xff0c;由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证&#xff0c;稳定可靠&#xff0c;可满足各种工业应用环境。 评估板接口资源丰富&…

AI通用大模型 —— Pathways,MoE, etc.

文章目录 Pathways现有AI缺憾Pathways Can DoMultiple TasksMultiple SensesSparse and Efficient Mixture of Experts&#xff08;MoE&#xff09;Neural Computation1991, Adaptive mixtures of local expertsICLR17, Outrageously Large Neural Networks: The Sparsely-Gate…

【已解决】ModuleNotFoundError: No module named ‘timm.models.layers.helpers‘

文章目录 错误信息原因解决方法专栏&#xff1a;神经网络精讲与实战AlexNetVGGNetGoogLeNetInception V2——V4ResNetDenseNet 错误信息 在使用timm库的时候出现了ModuleNotFoundError: No module named timm.models.layers.helpers’的错误&#xff0c;详情如下&#xff1a; …

Windows下安装ClickHouse图文教程

文章目录 1.安装WSL21.1启用适用于 Linux 的 Windows 子系统1.2启用Windows虚拟机功能1.3将WSL2设置为默认版本1.4下载Linux内核更新包1.5安装Linux子系统1.6设置账户和密码 2.安装Docker2.1下载与安装2.2设置镜像地址 3.安装Clickhouse3.1拉取镜像3.2启动clickhouse-server3.3…

Docker学习笔记7

启动一个运行httpd服务的容器&#xff1a; docker run -it --namec3 centos:latest /bin/bash 在容器中安装apache服务&#xff1a; yum install -y httpd 在这个过程中遇到一个问题&#xff1a; Error: Failed to download metadata for repo appstream: Cannot prepare …

关于PHP调用openAI chatGPT一些问题

我是直接使用gpt生成的curl代码区调用的 1&#xff1a;windows可能出现代理访问问题&#xff0c;报443端口问题 解决办法&#xff1a;开启代理后&#xff0c;需要到设置 确认这里打开状态 在curl请求里面加上对应的代码 curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1&qu…

java spring cloud 企业工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c…

企业运维 | NFS、Samba服务在Docker容器环境中快速搭建部署实践

欢迎关注「全栈工程师修炼指南」公众号 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1…

chatgpt赋能python:Python能自举吗?

Python能自举吗&#xff1f; Python是一门高级编程语言&#xff0c;由Guido van Rossum于1989年开发而来。Python被广泛用于Web开发、数据分析、人工智能等领域。因为Python语法简洁易懂&#xff0c;易于学习&#xff0c;许多人都称其为“入门语言”。 那么问题来了&#xff…

Spring Cloud——演进与应用的分布式系统开发利器

&#x1f338;作者简介&#xff1a;花想云&#xff0c;目前大二在读 &#xff0c;C/C领域新星创作者、运维领域新星创作者、CSDN2023新星计划导师、CSDN内容合伙人、阿里云专家博主、华为云云享专家 &#x1f338;专栏推荐&#xff1a;C语言初阶系列 、C语言进阶系列 、C系列、…

Linux之CentOS 7.9部署Oracle 11g r2_p13390677_112040最终版简易安装实测验证(桌面模式)

前言&#xff1a; Linux之CentOS 7.9部署Oracle 11g r2最终版安装实测验证&#xff08;桌面模式&#xff09; 介于前段时间的Windows以及linux无桌面模式环境&#xff0c;之前的linux oracl源包因缺失会存在报错现象&#xff0c;这次主要以oracle 11gr2更新包来记录下部署方式&…

不挂脖、不入耳,南卡NANK-OE骨传开放式蓝牙耳机

蓝牙耳机几乎成为和手机相同的EDC设备&#xff0c;无论是在工作还是通勤过程&#xff0c;无论是娱乐还是线上办公&#xff0c;随身携带的蓝牙耳机都能提供更舒适、更便捷的听觉和通话体验。 目前主流的蓝牙耳机有头戴式、入耳式和骨传耳机三类&#xff0c;考虑到使用的便携性普…

JavaScript:一门强大的脚本语言,掌握它,开启前端开发之路

目录 一、JavaScript的发展历史背景 二、JavaSxript的组成 三、javascript的基本特点 四、javascript的特性 五、Javascript的使用方式 六、JavaScript与Java的区别 七、JavaScript与JScript的区别 一、JavaScript的发展历史背景 JavaScript的发展历史可以追溯到20世纪9…

4 带你学MATLAB图像处理关键技术(matlab代码)

学习目标&#xff1a;学习图像处理关键技术知识点 %% 获取RGB图像中具体的3个像素点的像素值 clear all; RGBimread(peppers.png); r[12 23 36]; c[35 40 60]; pimpixel(RGB,r,c) %% 获取任意一点的像素值 非常方便 clear all; close all; imshow(peppers.png); himpixelin…