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 ...
随机推荐
- Effective Java 第三版——27. 消除非检查警告
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Guake!
快捷键及其定制: [全局快捷键] F12:显示/隐藏Guake的程序界面. [局部快捷键] Ctrl+Shift+T:新建标签页: Ctrl+Shift+W:关闭标签页: Ctrl+Shift+C:复 ...
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
我们最初学习计算机的时候,都学过ASCII编码. 但是为了表示各种各样的语言,在计算机技术的发展过程中,逐渐出现了很多不同标准的编码格式, 重要的有Unicode.UTF.ISO-8859-1和中国人 ...
- WEB前端大神之路之基础篇
CSS篇: 1.CSS权重: 不重复造轮子啦,直接传送门(CSS选择器的权重与优先规则) JavaScript篇: 1.this关键字: 它是一种引用(referent).指向的是当前上下文(cont ...
- RocketMQ环境搭建(双master模式)
介绍: 多Master模式,一个集群无Slave,全是Master,例如2个Master或者3个Master. 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时, ...
- Linux指令--chmod
chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...
- Tomcat 的设计模式分析
最近在研究tomcat,手上有一份尚硅谷的tomcat设计模式的资料,翻开看了看个人觉得写得还是很好的.设计模式一般都是在有一定的代理积累之后才能用到的相关的这种解决方案.常用的一共有23种设计模式, ...
- Log4net使用详细说明
1.概述 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是介绍如何在Visual S ...
- ORACLE SQL脚本能否修改字段名称?
在看到标题时,你先想想:在ORACLE中能否修改一个表的某个字段名呢?如果能的话,你是否还记得SQL脚本如何写的呢,呵呵,写这个的目的是因为在论坛上看见许多信誓旦旦的说ORACLE中不能修改字段名称, ...
- Docker几个基本常识
标签(linux): docker 此文来自本人学习以及网络整理而来. 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 对于用户来说,可能一开始在不了解的情况下会 ...