【SQL基础】【leetcode】SQL50题

news/2024/9/14 2:06:28/ 标签: sql, leetcode, linux

查询

(1)可回收且低脂的产品

题目链接

sql">SELECT product_id
FROM Products
WHERE low_fats='Y' AND recyclable='Y';

很简单,最基础的sql语句。

(2)寻找用户推荐人

题目链接

sql">SELECT name
FROM Customer
WHERE referee_id != 2 OR referee_id is NULL

SQL中对于空值的处理是is NULL 或者 is NOT NULL,对于布尔逻辑来说,null值不是true也不是false,因此null值和任何值比较结果都是UNKNOWN。为了解决这种unknown的情况,SQL使用了is NULL和is NOT NULL。

(3)大的国家

题目链接

sql">SELECT name,population,area
FROM World 
WHERE population>=25000000 OR area>=3000000

即对OR的使用,可以把两个条件放在一起。

(4) 文章浏览1

题目描述

sql">SELECT distinct(author_id) as id
FROM Views
WHERE author_id=viewer_id
ORDER BY id

因为可能出现不止浏览一次的情况,因此要使用distinct进行去重,同时注意返回顺序。(逆序为DESC为逆序)

(5)无效的推文

题目描述

sql">SELECT tweet_id
FROM tweets
WHERE LENGTH(content) > 15

使用LENGTH函数即可解决。在 MySQL 中,LENGTH 返回字符串的字节长度,而不是字符数量。因此对于多字节字符集时,如 UTF-8,用LENGTH去处理占用多个字节的字符(例如中文),就会出现问题。因为一个中文字符占3字节。所以你可以使用CHAR_LENGTH来处理

连接

(1)使用唯一标识码替换员工ID

题目描述

sql">SELECT unique_id, name
FROM Employees
LEFT JOIN EmployeeUNI
USING(id)

就是基础的左连接,如果有疑问可以看介绍。

左连接就是Employees根据id的进行链接EmployeeUNI,也就是一一对应。如果出现EmployeeUNI里没有能对应Employees的内容,那就只显示Employees里的内容。

(2)产品销售分析 I

题目描述

sql">SELECT product_name, year, price
FROM Sales s, Product p
WHERE s.product_id=p.product_id

不需要特殊的连接方式,直接用inner join就可以。或者我写的这种隐式链接。
这一题的本质就是将两个表合并,得到所需的信息,因此不需要额外的操作了。

(3)进店却未进行过交易的顾客

题目描述

有两种做法。

sql"># Write your MySQL query statement belowSELECT customer_id, COUNT(v.visit_id) as count_no_trans
FROM Visits v
WHERE v.visit_id NOT IN (SELECT visit_idFROM Transactions)
GROUP BY customer_id
ORDER BY count_no_trans

首先是子查询,用子查询查出Transaction的全部visit_id,然后主查询的部分查找visit_id不在Transaction里的,就可以得到只光顾商店的客人。然后对于计算次数,可以用count聚合函数进行计算,但需要用group by进行分组,这是因为如果不这样使用,聚合函数返回的结果是一个值,需要用分组进行分开。这样的问题在这里也出现过。

第二种做法是只使用联表查询:

sql">select customer_id, count(customer_id) as count_no_trans
from visits
left join transactions using(visit_id)
where transaction_id is null
group by customer_id;

这里用LEFT JOIN后,得到了每个用户的transaction次数,但有些用户是没有交易(买东西)的,因此在where的地方要判断transaction_id是否为空,筛选出的结果就是未光顾的。

注意,联表查询得到的结果是一张临时表,而最基础的join(inner)则是不会出现NULL,对于本题是只保留1、2、5的用户,而LEFT JOIN则可以保留多的一方的数据,得出NULL值。

(4)上升的温度

题目描述

sql">SELECT w2.id
FROM Weather w1, Weather w2
WHERE datediff(w2.recordDate, w1.recordDate)=1 AND w2.Temperature > w1.Temperature

DATE_DIFF 是一个用于计算两个日期之间差异的函数,它返回两个日期之间的差异,以天数为单位。
本题就是后一天温度大于前一天即可,因此我们返回的应该是w2的内容。

顺便一提,这样没有确定联表条件(例如w1.id=w2.id)的情况查询出的内容是笛卡儿积,而WHERE的限制条件则是对其的筛选。得到的结果一定是温度上w2>w1但日期只差一天。因此如果SELECT的是w1id,则会出现相反的结果。

(5)每台机器的进程平均运行时间

题目链接

sql">SELECT s.machine_id, ROUND(AVG(e.timestamp-s.timestamp), 3) as processing_time
FROM (SELECT machine_id, process_id, timestampFROM ActivityWHERE activity_type='start') as s,(SELECT machine_id, process_id, timestampFROM ActivityWHERE activity_type='end') as e
WHERE s.machine_id=e.machine_id AND s.process_id=e.process_id
GROUP BY machine_id

可以把原始的表分为start表和end表,再进行联表查询,这样就可以计算时间戳的插值,进而使用AVG计算平均值,用ROUND保留三位小数。

(6)员工奖金

题目描述

sql">SELECT name, bonus
FROM Employee
LEFT JOIN Bonus USING(empId)
WHERE bonus<1000 OR bonus IS NULL

如果要搜出NULL值,使用左连接,同时注意NULL值需要单独判断。

(7) 学生们参加各科测试的次数

题目链接

sql">SELECT s.student_id, s.student_name, sub.subject_name,COUNT(e.subject_name) as attended_exams
FROM Students s
JOIN Subjects sub
LEFT JOIN Examinations e
ON e.student_id=s.student_id AND e.subject_name=sub.subject_name
GROUP BY student_id, subject_name
ORDER BY student_id

这个题最大的难点就是确保每个学生都有三个科目,即便他们没参加考试。但对于题目观察一下就可以知道,可以直接对学生表和科目表进行笛卡儿积的操作,这样就可以确保每个学生都有三个科目,再将结果进行左连接,即可确保结果是每个学生且都有三个科目。

(8)至少有5名直接下属的经理

题目链接

sql">SELECT name
FROM (SELECT COUNT(managerId) as num,managerIdFROM EmployeeGROUP BY managerIdHAVING num>=5) as t, Employee e
WHERE e.id=t.managerId

Employee中搜索出managerID数量大于5的managerID,同时由managerID分组。再和Employee进行联表查询即可。

(9)确认率

题目描述

sql">SELECT t1.user_id, IFNULL(ROUND((t2.num/t1.num), 2), 0) as confirmation_rate
FROM(SELECT user_id, COALESCE(t.num, 0) as numFROM(SELECT COUNT(user_id) as num,user_idFROM ConfirmationsGROUP BY user_id) as tRIGHT JOIN Signups USING(user_id)) as t1,(SELECT user_id, COALESCE(t.num, 0) as numFROM(SELECT COUNT(user_id) as num,user_idFROM ConfirmationsRIGHT JOIN Signups USING(user_id)WHERE action='confirmed'GROUP BY user_id) as tRIGHT JOIN Signups USING(user_id)) as t2
WHERE t1.user_id=t2.user_id
GROUP BY t2.user_id

重点之一是用IFNULL函数进行去NULL.
用两个子查询查出总数和timeout,进行除法计算。


http://www.ppmy.cn/news/1516573.html

相关文章

嵌入式面经篇十——驱动开发

文章目录 前言一、驱动开发1、Linux 驱动程序的功能是什么?2、内核程序中申请内存使用什么函数?3、内核程序中申请内存和应用程序时申请内存有什么区别?4、自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用自旋锁还是信号量?5、驱动卸载异常可能是…

了解一下 CSS 的了解font-variant-alternates属性

font-variant-alternates 是 CSS Fonts 模块中的一个属性&#xff0c;它允许你控制字体的变体&#xff08;variants&#xff09;和替代字形&#xff08;alternate glyphs&#xff09;的显示。这个属性提供了比 font-variant 更细粒度的控制&#xff0c;特别是当字体包含多种样式…

计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微博数据分析可视化大屏 微博情感分析 微博爬虫 知识图谱

1.selenium爬取微博热搜、文章、评论数据存入mysql数据库&#xff0c;对评论lstm情感分析模型建模分析; 2.使用mapreduce对mysql中微博数据清洗&#xff0c;转为.csv文件上传hdfs文件系统&#xff1b; 3.使用hive建库建表,导入.csv数据集&#xff1b; 4.一半指标hive_sql进行离…

代码随想录算法训练营第三十九天 | 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

目录 198.打家劫舍 思路 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一&#xff1a; 动态规划-一维 方法二&#xff1a;动态规划-二维 方法三&#xff1a;动态规划-两个变…

JVM上篇:内存与垃圾回收篇-07-方法区

笔记来源&#xff1a;尚硅谷 JVM 全套教程&#xff0c;百万播放&#xff0c;全网巅峰&#xff08;宋红康详解 java 虚拟机&#xff09; 文章目录 7. 方法区7.1. 栈、堆、方法区的交互关系7.2. 方法区的理解7.2.1. 方法区在哪里&#xff1f;7.2.2. 方法区的基本理解7.2.3. HotSp…

基于 Transformer 的深度学习混合架构用于相位展开

原文&#xff1a;Transformer based deep learning hybrid architecture for phase unwrapping &#x1f4a1; 摘要&#xff1a;提出了一种用于相位展开的深度学习混合架构。混合架构基于卷积神经网络 (CNN) 与视觉变换器的集成。将混合架构/网络在相位展开中的性能与基于 CNN …

使用AWS的EC2服务如何降低成本

在现代企业中&#xff0c;云计算已经成为推动业务创新和发展的重要工具。亚马逊云服务&#xff08;AWS&#xff09;的弹性计算云&#xff08;EC2&#xff09;提供了灵活的计算能力&#xff0c;企业可以根据需求快速部署和管理应用。然而&#xff0c;如何在使用EC2服务的过程中有…

【MySql】深入解析MySQL底层基础知识:存储引擎、数据结构与磁盘交互

一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统&#xff0c;其底层基础知识对于数据库管理员和开发者来说至关重要。本文将详细介绍MySQL的存储引擎、数据结构以及数据在磁盘上的存储和读取机制&#xff0c;帮助读者更好地理解MySQL的内部工作原理。 二、MySQL存…

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档&#xff0c;需要详细讨论微服务架构的核心概念、优缺点、关键技术&#xff0c;以及在分布式系统中的应用。以下是文档的大纲和内容概述&#xff1a; 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

Java学习笔记(04)String与可变字符序列:StringBuffer、StringBuilder的区别

前言&#xff1a; 因为String对象是不可变对象&#xff0c;虽然可以共享常量对象&#xff0c;但是对于频繁字符串的修改和拼接操作&#xff0c;效率极低&#xff0c;空间消耗也比较高。因此&#xff0c;JDK又在java.lang包提供了可变字符序列StringBuffer和StringBuilder类型。…

opencv-4.8.0 Yes everything works with CUDA 12.3 and cuDNN 8.9.7.

opencv-4.8.0 CUDA 12.3 DNN 8.9.7 完美编译运行 脚本&#xff1a; sudo apt-get install libeigen3-dev sudo apt-get install protobuf-compiler sudo apt-get install libeigen3-dev sudo ln -s /usr/include/eigen3/Eigen /usr/include/Eigen cd ${current_path}/deps…

8月26日,恭喜CUUG 肖同学获得19c OCM证书!

8月26日&#xff0c;恭喜CUUG 肖同学获得Oracle 19c OCM证书。 19c OCM 考试大纲&#xff1a; Skillset 1&#xff1a;常用数据库与网络管理 Skillset 2.1&#xff1a;管理数据库的可用性 Skillset 2.2&#xff1a;数据仓库管理 Skillset 2.3&#xff1a;数据管理 Skillse…

【ORACLE】如何使用 EXPLAIN PLAN来分析和优化包含 GROUP BY 的查询?

在Oracle数据库中&#xff0c;使用EXPLAIN PLAN来分析和优化包含GROUP BY的查询是一个重要的性能调优步骤。以下是如何使用EXPLAIN PLAN来分析这类查询&#xff0c;并提供一些优化建议的步骤&#xff1a; 步骤 1: 生成执行计划 首先&#xff0c;你需要为包含GROUP BY的查询生…

MySQL中的锁详解

1.概念 锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题&#xff0c;锁的冲突也是影响数据库并发访问性能的一个重要因素&#xff0c;所以数据库中锁的应用极为重要&#xff0c;其复杂度也更高。 …

Kafka的生产者和消费者机制

目录 1.基础的客户端 1.1消息发送者的主流程 1.2消息消费者主流程 2.客户端工作机制 2.1消费者分组消费机制 2.2生产者拦截器机制 2.3消息序列化机制 2.4消息分区路由机制 2.5生产者消息缓存机制 2.6发送应答机制 2.7生产者消息幂等性 (1)生产者消息幂等性介绍 (2…

sql报错之 : The user specified as a definer (‘xxx‘@‘%‘) does not exiet

报错详情 : 其中这个xxx是在定义触发器的时候 的 定义者 &#xff0c; 触发器详情代码 : ## 创建新增评论数据触发器&#xff0c;一旦新增评论则对应视频的评论量加一 CREATE DEFINERxxx% TRIGGER increment_comment_count AFTER INSERT ON comment FOR EACH ROW BEGINUPDAT…

mac在终端中使用vscode打开文件或者文件夹

在Mac上使用Visual Studio Code&#xff08;VSCode&#xff09;打开指定文件夹&#xff0c;你可以通过以下步骤操作&#xff1a; 1.创建软连接 1.找到VSCode的安装位置。在Finder中&#xff0c;导航到/Applications/Visual Studio Code.app 2.进入VSCode的内容文件夹&#x…

小琳AI课堂:使用ChatGPT API搭建系统(二)

&#x1f389; Python与ChatGPT API的奇妙之旅 &#x1f389; 大家好&#xff0c;欢迎回到小琳AI课堂&#xff01;今天我们要探索的是如何在“使用ChatGPT API搭建系统”课程中&#xff0c;用Python代码与ChatGPT API进行有趣的互动。准备好了吗&#xff1f;让我们开始吧&#…

Leetcode每日刷题之1658.将x减到0的最小操作数(C++)

1.题目解析 本题的要求是给出一个正整数数组与一个x&#xff0c;要求只从数组两端取数据后x减去取出的数据&#xff0c;求出将x减为0的最小操作数&#xff0c;即找出数组两端的数字保证其和为x并且要求取出的数字个数最少&#xff0c;如果没有符合要求的数字则返回-1 题目来源&…

使用redis模拟cookie-session,例子:实现验证码功能

目录 在前后端分离架构中不建议使用cookie-session机制实现端状态识别 所以我们可以使用redis来模拟session-cookie机制 下面我们通过实现验证码的功能来举例 第一步&#xff1a;了解前端要我们返回的数据变量名字&#xff0c;变量类型 1.封装code,data成一个result类&…