Leetcode 之 Mysql(day01)
大四已经接近一半了,下学期就要准备找工作实习了。为了自己能找到一份比较满意的实习,今天开始要刷一下题目。今天就刷 MySQL 语言。以下就是我今天刷的题目。大家也可以去 leetcode 注册一个账号来刷一下题目。里面有很多的算法题。
第一题:编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State
表1: Person
+-------------+---------+
| 列名         | 类型     |
+-------------+---------+
| PersonId    | int     |
| FirstName   | varchar |
| LastName    | varchar |
+-------------+---------+
PersonId 是上表主键
表2: Address
+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| AddressId   | int     |
| PersonId    | int     |
| City        | varchar |
| State       | varchar |
+-------------+---------+
AddressId 是上表主键
select p.FirstName, p.LastName, a.City, a.State
from Person p left join Address a on p.PersonId = a.PersonId
第一题比较简单,考查我们对两个表的连接,并且对于左连接这个概念。
第二题:编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。
+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+
select IFNULL(
(select Salary from Employee
group by Salary
order by Salary desc
limit 1,1 ) , null) as SecondHighestSalary
第二题难点在于找不到的时候怎样返回一个 null 值。我就运用了 IFNULL() 函数 。
IFNULL() 函数:用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
表达式:IFNULL(expression, alt_value)。
这样就很好解释第二题的 null 值了。这里还要掌握分组(group by) 和 排序(order by)。还有一个就是分页(limit)。
这里就是通过工资分组,再排序,最后通过分页求出值。
第三题:编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
SET N = N - 1;
RETURN (
select IFNULL(
(select Salary from Employee
group by Salary
order by Salary desc
limit N , 1) , null)
as getNthHighestSalary
);
END
这题在第二题基础上修改成查找第n高的薪水。
这里用函数的写法来考查我们。在第二题的基础上注意N的变量就可以求出这题了。
第四题:编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。
+----+-------+
| Id | Score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+
例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):
+-------+------+
| Score | Rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+
select Score , (select count(DISTINCT score) from Scores where score >= s.score) as Rank
from Scores s order by Score desc
此题难点在于怎样显示他们的排序。先统计有多少行,不能重复。
第五题:编写一个 SQL 查询,查找所有至少连续出现三次的数字。
+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+
例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+
select distinct(a.Num) as ConsecutiveNums
from Logs a join Logs b on a.Id = b.Id+1 join Logs c on a.Id = c.Id + 2
where a.Num = b.Num and a.Num = c.Num
此题一定要注意题目是连续出现至少三次,要连续的。一开始我是直接统计出现的次数,再审题,发现不对。
我就直接点,用表的自连接来解决这题。连接规则:根据id的连续三个以上来连接,再判断这三个值是否相等。
这就是今天刷的题目,刚刚太久没有接触 sql 了,很多都不会写了。要经常锻炼才可以了。
每天写一下博客,记录一下自己每天学到的知识。@HHH
Leetcode 之 Mysql(day01)的更多相关文章
- MySQL日记
		
MySQL日记 MySQL——day01:https://www.cnblogs.com/noonjuan/diary/2019/07/24/11241543.html MySQL——day02:ht ...
 - MySql查询语句中的变量使用
		
前言 今日在LeetCode刷MySql的题,遇到一题,题目到没什么,解答完了之后习惯去看此题的题解,有位大佬的思路让博主感觉很惊艳,至此,特地记录学习一下. 题目 解答 乍一看题目也没啥,分数排名, ...
 - PreparedStatement和Statment
		
使用Statment安全性差,存在SQL注入隐患 public static void main(String[] args) { Connection conn=null; Statement st ...
 - web笔记全
		
1.项目流程与数据库 1.课程体系 阶段1(服务器开发): 项目导入/数据库/JS基础/NodeJS 阶段2(前端核心技术): HTML/AJAX/CSS/bootstrap 阶段3(前端进阶技术): ...
 - LeetCode 177 Nth-Highest Salary mysql,取第n条数据,limit子句 难度:1
		
https://leetcode.com/problems/nth-highest-salary/ ATTENTION:limit 子句只能接受int常量,不能接受运算式 CREATE FUNCTIO ...
 - LeetCode 176 Second Highest Salary mysql,select 嵌套 难度:1
		
https://leetcode.com/problems/second-highest-salary/ Write a SQL query to get the second highest sal ...
 - LeetCode 176. 第二高的薪水(MySQL版)
		
0.前言 最近刷LeetCode 刷数据库题目 由于数据库课上的是SQL,而MySQL有许多自己的函数的,怕把刚学会的函数忘记 特在此记录! 1.题目 编写一个 SQL 查询,获取 Employee ...
 - day01 mysql认识 安装 配置 起服务 密码 字符集 用户授权
		
day01 mysql 一.认识mysql 关系型数据库: 最流行的关系型数据库管理系统,支持大型数据库,处理上千万条记录 关系型: oracle, ...
 - [LeetCode]1084. 销售分析III(Mysql,having+聚合函数)
		
题目 Table: Product +--------------+---------+ | Column Name | Type | +--------------+---------+ | pro ...
 
随机推荐
- Flask容器化部署原理与实现
			
本文将介绍Flask的部署方案:Flask + Nginx + uWSGI,并使用docker进行容器化部署,部署的实例来源 Flask开发初探,操作系统为ubuntu. Flask系列文章: Fla ...
 - 重磅!普惠AI--华为云语音语义万次调用1元购,有奖问答@评论区等你来!【华为云技术分享】
			
活动快速入口:https://activity.huaweicloud.com/language_speech_promotion0.html 语音交互与自然语言处理 语音交互是一种人机交互方式,以开 ...
 - 浏览器url访问tomcat出现错误 java.lang.NoSuchMethodError解决方法
			
一般该类错误: 找不到方法或找不到类, 都是maven pom 仓库依赖的问题,有时是 因为缺少该依赖类,可以考虑添加相关依赖: 有时因为依赖冲突, 可以到 maven 的仓库下面把 有关该类的包 全 ...
 - 登录oracle数据库
			
1.windows (cmd)命令行登录: 下载命令行工具 点击这里进入官网下载,下载其中三个文件 instantclient-basic-windows.x64-19.3.0.0.0dbru.zip ...
 - Spring事物实例
			
Spring事务实例: entity实体类: public class Accounts { private int accountid; private String accountname; pr ...
 - BZOJ2440完全平方数(莫比乌斯反演)
			
Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ...
 - 2018HDU多校训练-3-Problem M.      Walking Plan
			
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6331 Walking Plan Problem Description There are n inte ...
 - 笔记||Python3之对象与变量
			
什么是对象?什么是变量? 在python中,一切都是对象,一切都是对象的引用. 变量相当于数学中的等式,比如xy = 20 .在编程中变量还可以是任意数据类型. 对象是分配的一块内存,有足够的空间去表 ...
 - redis(5)--redis集群之哨兵机制
			
哨兵机制 在前面讲的master/slave模式,在一个典型的一主多从的系统中,slave在整个体系中起到了数据冗余备份和读写分离的作用.当master遇到异常终端后,需要从slave中选举一个新的m ...
 - 物联网基础组件IoTClient开发系列
			
系列目录 IoTClient开发1 - 你也可以写个聊天程序 IoTClient开发2 - 你也可以写个服务器 IoTClient开发3 - ModBusTcp协议客户端实现 IoTClient开发4 ...