day13 SQL基础-连接

1280. 学生们参加各科测试的次数
在这里插入图片描述
要求写一段 SQL 语句,查询出每个学生参加每一门科目测试的次数,结果按 student_id 和 subject_name 排序。

查询结构格式如下所示:
在这里插入图片描述
在这里插入图片描述

# Write your MySQL query statement below
select 
	 t.student_id,
 	 t.student_name,
 	 t.subject_name,
-- 	 if(e.subject_name is null,0,1) as attended_exams
 	 
	 COUNT(e.subject_name) AS attended_exams
from
	(select *from Students as s1 Cross join Subjects as s2) as t 
	 left join Examinations as e on t.subject_name =e.subject_name and e.student_id=t.student_id
group by 
 	t.student_id,
 	t.subject_name
order by 
	t.student_id,
 	t.subject_name

# select 
# -- 		s1.student_id,
# -- 		s1.student_name,
# -- 		s2.subject_name
# -- 		count(*) as attended_exams
# 			*
# from
# -- 		Students_1280 as s1 left join Examinations_1280 as e on e.student_id=s1.student_id
# -- 		left join Subjects_1280 as s2 on s2.subject_name=e.subject_name
# -- 			Subjects_1280 as s2 left join Examinations_1280 as e on e.subject_name=s2.subject_name
# 				Students_1280 as s1 Cross join Subjects_1280 as s2
# -- group by 
# -- 		s1.student_id,
# -- 		s1.student_name,
# -- 		s2.subject_name

1501. 可以放心投资的国家
在这里插入图片描述
在这里插入图片描述
一家电信公司想要投资新的国家. 该公司想要投资的国家是: 该国的平均通话时长要严格地大于全球平均通话时长.

写一段 SQL, 找到所有该公司可以投资的国家.

返回的结果表没有顺序要求.

查询的结果格式如下例所示.

在这里插入图片描述
在这里插入图片描述

	select
  	    distinct t.countryName AS country  
	from
			(select 
				c1.name as countryName,
                c2.duration
			from
				Country as c1 left join Person as p  on left(p.phone_number,3) =  c1.country_code 
			    left join (SELECT caller_id , duration FROM Calls
                           UNION
                           SELECT callee_id , duration FROM Calls) as c2 on c2.caller_id = p.id) as t
	group by
			t.countryName
	having 
			avg(t.duration) > (SELECT avg(duration) from Calls)

184. 部门工资最高的员工
在这里插入图片描述
编写SQL查询以查找每个部门中薪资最高的员工。
按 任意顺序 返回结果表。
查询结果格式如下例所示。
在这里插入图片描述

# select
# 		t.Department,
# 		t.Employee,
# 		t.Salary
# from
# 	(
# 	select 
# 			d.name as Department,
# 			e.name as Employee,
# 			e.salary,
# 			rank() over(partition by d.name order by e.salary desc) as ranking
# 	from
# 			Employee as e left join Department as d  on d.id = e.departmentId
# 		) as t
# where 
# 		t.ranking=1

select
		d.name as Department,
		e.name as Employee ,
		e.salary as Salary 
from
		Department as d left join Employee as e on d.id = e.departmentId
where
		(d.name,e.salary) in (
								select
										d.name,
										max(salary) as salary
								from
										Department as d left join Employee as e on d.id = e.departmentId	
								group by 
										d.name		
		)

580. 统计各专业学生人数
在这里插入图片描述
编写一个SQL查询,为 Department 表中的所有部门(甚至是没有当前学生的部门)报告各自的部门名称和每个部门的学生人数。

按 student_number 降序 返回结果表。如果是平局,则按 dept_name 的 字母顺序 排序。

查询结果格式如下所示。
在这里插入图片描述

# select 
# 		*
# from
# 		(select
# 				d.dept_name,
# 				count(s.dept_id) as student_number 
# 		from
# 				Department as d left join Student as s on s.dept_id=d.dept_id
# 		group by
# 				d.dept_name) as t
# order by
# 		t.student_number desc, t.dept_name

select
	d.dept_name,
	# ifnull(count(student_name),0) student_number
    count(s.dept_id) as student_number
from
	Department as d left join Student as s on s.dept_id=d.dept_id
group by
	d.dept_name
order by
    student_number desc, d.dept_name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值