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 ...
随机推荐
- java访问修饰符 public protect default private
适用范围<访问权限范围越小,安全性越高> 访问权限 类 包 子类 其他包 public ok ok ok ok (对所有可用的 ...
- [转]maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
源文URL:http://blog.csdn.net/caiwenfeng_for_23/article/details/44514947 mvn compile 没有问题,mvn package的 ...
- sql语句添加删除外键及其约束
--删除外键 ALTER TABLE t_base_role_module DROP CONSTRAINT fk_t_base_role_module_t_base_defined_url; --增加 ...
- Linux - ubuntu 设置固定ip和设置dns
ubuntu 设置固定ip和设置dns 1.ifconfig 查看网卡名称 root@jiqing-virtual-machine:~# ifconfig ens32 Link encap:以太网 硬 ...
- 递归演示程序(swift)
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- CSS3 三角形运用
酷酷的 CSS3 三角形运用 概述 在早期的前端Web设计开发年代,完成一些页面元素时,我们必须要有专业的PS美工爸爸,由PS美工爸爸来切图,做一些圆角.阴影.锯齿或者一些小图标. 在CSS3出现 ...
- 剑指offfer:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成这样一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 例如: 1 2 ...
- Java多线程之线程的控制
Java多线程之线程的控制 线程中的7 种非常重要的状态: 初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...
- MyEclipse中好用的快捷键汇总
MyEclipse中常用的快捷键有很多,合理的使用其中一些快捷键组合,可以有效提高开发的效率和质量. 1.Ctrl + Shift + R:打开资源.可以查找并打开工作区中任何一个文件,且支持使用通配 ...
- Halcon一日一练:创建三通道图像
首先理解一个什么是三通道图像: 三通道图像就是彩色图像,我们之前黑白相机或黑白电视机都是彩用的灰阶图像,即单通道图像,一般是2的8次方个灰阶,即256个灰阶.彩色图像采用RGB,红绿蓝三个通道来合成彩 ...