【SQL基础】【leetcode】SQL50题

2024-08-26 18:52

本文主要是介绍【SQL基础】【leetcode】SQL50题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

查询

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

题目链接

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

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

(2)寻找用户推荐人

题目链接

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)大的国家

题目链接

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

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

(4) 文章浏览1

题目描述

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

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

(5)无效的推文

题目描述

SELECT tweet_id
FROM tweets
WHERE LENGTH(content) > 15

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

连接

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

题目描述

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

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

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

(2)产品销售分析 I

题目描述

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

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

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

题目描述

有两种做法。

# 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进行分组,这是因为如果不这样使用,聚合函数返回的结果是一个值,需要用分组进行分开。这样的问题在这里也出现过。

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

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)上升的温度

题目描述

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)每台机器的进程平均运行时间

题目链接

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)员工奖金

题目描述

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

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

这篇关于【SQL基础】【leetcode】SQL50题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109399

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分