力扣数据库实例代码--第三节

第十一题

现有数据表World,字段为Name、Continent、Area、Population、Gdp

如果一个国家的面积超过300万平方公里,或者人口超过2500万,那么这个国家就是大国家

要求:请编写一个SQL,筛选出所有大国家的名称、人口和面积

select Name, Population, Area from World where Area>3000000 or Population>25000000;

解析:或条件语句可以使用or关键字

第十二题

现有数据表Courses,字段为Student、class

要求:请编写一个SQL,筛选出所有超过5名学生的课程
此外,学生在每门课中不应被重复计算

select class from courses group by class having count(distinct student)>=5;

解析:计数时需要将相同姓名的学生进行过滤

第十三题

现有数据表Logs,字段为Id、Num

要求:编写一个SQL,查找所有至少连续出现三次的数字

方案一

select distinct L1.Num ConsecutiveNums from Logs L1, Logs L2, Logs L3 
where 
L1.Num=L2.Num and L2.Num=L3.Num and L1.id=L2.id-1 and L2.id=L3.id-1;

方案二

select distinct Num as ConsecutiveNums 
from (
	select Num,
		case
			when @prev = Num then @count:=@count+1                                         
			when @(prev := Num) is not null then @count := 1
		end as CNT
	from Logs, (select @prev := null, @count := null) as t
) as temp
where temp.CNT>=3

解析:’:='表示初始化, @prev表示用户自定义变量名,首先初始化变量@prev, @count,当有新值时都会进行初始化@count,将其初始化为1,随后进行判断当Num等于@prev时,会进行自增1

第十四题

现有数据表Employee、字段为Id、Name、Salary、ManagerId

要求:请查询出收入超过他们经理的姓名

select Name from Employee e where Salary>(select Salary from Employee where id =e.ManagerId);

解析:本表自关联查询

第十五题 部门工资最高的员工

现有数据表Employee,字段为Id、Name、Salary、DepartmentId; 数据表Department, 字段为Id、Name

要求:找出每个部门工资最高的员工,获取其部门,姓名,工资

select
	d.Name Department,
	e.Name Employee,
	e.Salary Salary
from 
	Employee e join Department d
	on e.DepartmentId = d.Id
where e.Salary >= (
	select max(Salary) from Employee e1 where e.DepartmentId = e1.DepartmentId
);

解析:首先两表关联,随后Employee自连接,只有当工资等于最高工资时,才会返回员工的各个信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值