SQL查询练习一(From LeetCode)
请选用MySQL进行测试.
1.找出后一天比前一天温度高的日期(E)
思路:将该表进行自关联,然后选择出日期靠后的一天,最后选择温度高的日期
select Weather.Id
from Weather join Weather w
on datediff(Weather.Date,w.Date) = 1
and Weather.Temperature > w.Temperature
2.找出人口在3百万或者领土面积在25百万的国家(E)
思路:使用where进行条件过筛选,or进行或判断
select name,population,area
from World
where area > 3000000 or population > 25000000
1 select name,population,area
2 from World
3 where area > 3000000 or population > 2500000
3.判断是否是三角形(E)
思路,使用case when进行搭配,使用三角形定义进行判断x+y>z,x+z>y,y+z>x
select x,y,z,
case
when x+y>z and y+z>x and x+z>y then 'Yes'
else 'No'
end as triangle
from triangle
4.找出薪水第二高的员工
思路:先找出最多的薪水的员工,在把他的薪水小于最大的工资即可
select Max(Salary) as SecondHighestSalary
from Employee
where Salary < (select Max(Salary) from Employee)
5.找出每个学科都有多少名学生(M)
思路:将两张表进行左连接,一department表作为主表,然后按照dept_name进行分组,最后按照人数进行降序排列
select d.dept_name,count(student_id) as student_number
from department d left join Student s
on d.dept_id = s.dept_id
group by d.dept_name
order by student_number desc,d.dept_name
6.找出每个部门薪水最高的员工(M)
思路:将两张表进行连接,内层查询根据department表的name进行分组,每组的最大值,既是每个部门的薪水最大值,然后传递给外层的部门id和薪水即可
select d.Name as Department,e.Name as Employee,e.Salary as Salary
from Department d join Employee e
on e.DepartmentId = d.Id
where (e.DepartmentId,e.Salary) in
(
select DepartmentId,max(Salary)
from Employee
group by DepartmentId
)
7.找出至少有5名下属的领导(M)
思路:使用内层查询查找出有5名下属的ManagerId然后,将外层查询的员工Id=ManagerId就是查询的结果
select e1.Name
from Employee e1
join
(
select ManagerId from Employee
group by ManagerId
having count(*) >= 5
) as e2
on e1.Id = e2.ManagerId
8.找出得票最多的候选人(M)
思路:先在内层查询中找出最受欢迎的候选人,然后将中间表的候选人Id既是赢家的候选人id,两者相等即可
select c.Name
from Candidate c
join
(
select CandidateId from Vote
group by CandidateId
order by count(*) desc
limit 1
) as winner
on c.id = winner.CandidateId;
9.根据Score计算等级(M)
思路:将两张表进行自连接,根据Id进行分组,最后根据Rank进行排序
select s.Score,count(distinct t.Score) as Rank
from Scores s join Scores t
on s.Score <= t.Score
group by s.Id
order by Rank
10.找出二叉树的节点分布(M)
思路:使用case when的结构进行循环判断输出
select id,
case
when tree.id = (select atree.id from tree atree where atree.p_id is NULL)
then 'Root'
when tree.id in (select atree.p_id from tree atree)
then 'Inner'
else
'Leaf'
end as Type
from tree
order by id
11.找出每个部门薪水排前三名的员工(H)
思路:先进行表连接,将内层查询的结果和外部的表的Salary相比较,选择前面3个
select d.Name as Department,e.Name as Employee,e.Salary
from Employee e join Department d
on e.DepartmentId = d.Id
where 3 >
(
select count(distinct e2.Salary)
from Employee e2
where e2.Salary > e.Salary
and e.DepartmentId = e2.DepartmentId
)
12.找出2013-10-01到2013-10-03之间的网约车的取消率(H)
思路:计算取消率,使用case when语法,找出Trips中Status变量以canceled_开头的比例
select t.Request_at as Day,
round(sum(case when t.Status like 'cancelled_%' then 1 else 0 end)/count(*),2) as "Cancellation Rate"
from Trips t join Users u
on t.Client_Id = u.Users_Id
where u.Banned = 'No'
and t.Request_at between '2013-10-01' and '2013-10-03'
group by t.Request_at
13.找出每个部门员工薪水的中位数(H)
思路:将此表进行自关联,计算工资的中位数,使用case when计算中间表的中位数
select e.Id,e.Company,e.Salary
from Employee e join Employee aliens
on e.Company = aliens.Company
group by e.Company,e.Salary
having sum(case when e.Salary = aliens.Salary then 1 else 0 end) >=
abs(sum(sign(e.Salary-aliens.Salary)))
order by e.Id
SQL查询练习一(From LeetCode)的更多相关文章
- SQL查询练习二(From LeetCode)
请选用MySQL进行测试. 1.将男性和女性的工资互换(E) 思路:使用case when进行条件判断,在使用update进行修改 update salary set sex = case sex w ...
- SQL常见优化Sql查询性能的方法有哪些?
常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...
- 记一个简单的sql查询
在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...
- Oracle常用SQL查询(2)
三.查看数据库的SQL 1 .查看表空间的名称及大小 select t.tablespace_name, round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...
- SQL查询第m条到第n条的方法
SQL查询第m条到第n条的方法 如表名为GOOD Sselect top (n-m) * from GOODS where (某一列名) not in (select top m (某一列名) fro ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- slick for play 使用原生sql查询以及拼接sql
在play中用函数式框架slick来操作数据库是一件很爽的事情.但有时因为某些特殊场景又不得不用原生的sql了. 还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL ...
- SQL查询每个表的字段数量
--SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...
随机推荐
- myeclipse 奔溃解决办法
myeclipse 突然奔溃 解决办法 JVM terminated.Exit code=1 意思是说java 虚拟机挂了,而不是myeclipse挂了. 进入myeclipse 目录 查看myecl ...
- Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。
时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...
- HTTP常用状代码
2XX 成功 204 Not Content 请求处理成功,但没有资源可以返回. 1 put请求:该资源已存在于服务器上 2 delete请求:该资源已从服务器上删除 200 OK 请求正常处理 20 ...
- webpack+vuecli打包生成资源相对引用路径与背景图片的正确引用
资源相对引用路径 问题描述 一般情况下,通过webpack+vuecli默认打包的css.js等资源,路径都是绝对的. 但当部署到带有文件夹的项目中,这种绝对路径就会出现问题,因为把配置的static ...
- JS实现倒计时
HTML部分: <div class="div"> <div id="div"> </div> </div> C ...
- vs2005配置OpenCv2.3.1
编译OpenCv 1 用CMake导出VC++项目文件 运行cmake-gui,设置where is the source code路径为OpenCV安装路径(本文档假定安装位置为:c:\OpenCV ...
- JDK自带的日志Logging
OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...
- XML (二)
1 SAX 在使用DOM解析XML文档的时候,需要读取整个XML文档,在内存中构架代表整个DOM树的Document对象,从而再对XML文档进行操作.此种情况下,如果XML文档特别大,就会消耗计算机的 ...
- 重新认识AWS
Amazon Web Services早期logo: 现在的logo: 一.背景Amazon Web Services,简称AWS.目前世界第一大云计算厂商,AWS 云在全球 18 个地理地区内运营着 ...
- ado.net 参数传递之 in
之前项目有一放行的功能,对某界面维护时(数据的增删改),先将数据保存到临时表中,放行后再真正的写入到库中.由于设计到主从表多中约束关系,所以当时我采用的是写一个存储过程来对某个界面的操作进行统一处理, ...