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 ...
随机推荐
- 【跟唐老师学习云网络】 - 第6篇 ARP你在哪
[摘要] 这一章节你的角色就是ping报文这个"使者",你要去往目的地,然后回到本机.然而目的地路漫漫,不知道要经过多少个小地盘(局域网),没两把刷子也不好行走江湖.所以你作为使者 ...
- 基于webpack实现多html页面开发框架四 自动写入多入口,自动插入多个htmlWebpackPlugin插件
一.解决什么问题 1.手写页面多入口,一个一个输入太麻烦,通过代码实现 2.手写多个htmlWebpackPlugin插件太麻烦,通过代码实现 二.多入口代码实现 //读取所有.j ...
- python geohash算法逆地址编码原理初探
1.geohash有什么用途呢?这几天刚好有个测试任务是关于设备信息位置处理的,里面提及到geohash:抱着测试的警觉性,打算研读一下这个geohash到底是什么?Geohash 是一种地理编码系统 ...
- 洛谷 题解 P1372 【又是毕业季I】
这题... 只能说:n / k罢了... 但是: 代码没有最短,只有更短! #include <stdio.h> int n, k; int main() { return scanf(& ...
- python3导入子模块
基础知识 参考资料1上有一句话Regular packages are traditional packages as they existed in Python 3.2 and earlier. ...
- 基于cyusb3014的usb3.0双目摄像头开发测试小结(使用mt9m001c12stm)
测试图像 摄像头分辨率为1280*1024,双目分辨率为2560*1024 ps:时钟频率太高,时序约束还得进一步细化,图像偶尔会出现部分雪花,下一步完善
- USB视频采集系统 视频测试软件将正式发布(方便调试测试各自摄像头,RAW,RGB,YUV)
先上图,看看这个软件,学习fpga将近一年,了解视频图像开发方向也半年有余,不断学习不断总结,开发软件工具是为了更方便的学习新通信 主要相关知识: FPGA+SDRAM+VGA(双端口fifo技术) ...
- 基于FPGA的图像开发平台 其他摄像头附件说明(OV5642 OV9655)
基于FPGA的图像开发平台 其他摄像头附件说明 FPGA_VIP_V101 编者 奇迹再现 个人博客 http://www.cnblogs.com/ccjt/ 联系邮箱 Shenyae86@163.c ...
- 《Java算法》判重算法-整数判重
判重算法-整数判重 /** * 判断大于1,小于63的整数是否出现重复数字. * * 算法逻辑:先获取8 根据移位(1 << arrInt[i]) 得到2进制数100000000 , * ...
- JavaScript图形实例:五角星
1.五角星 在半径为80的圆周上取5个点,用这5个点依次首尾连接画5条线,可以绘制出一个五角星图案. 编写如下的HTML代码. <!DOCTYPE html> <head> & ...