day16 SQL基础-不等式

本文介绍了几种实用的SQL查询技巧,包括如何查找连续出现三次以上的数字、如何计算由表中任意两点形成的矩形面积(边与坐标轴平行),以及如何确定学校最低录取分数线的要求等。这些技巧有助于提高SQL查询效率和解决复杂的数据分析问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

180. 连续出现的数字
在这里插入图片描述
编写一个 SQL 查询,查找所有至少连续出现三次的数字。

返回的结果表中的数据可以按 任意顺序 排列。

查询结果格式如下面的例子所示:
在这里插入图片描述

方法一:
select
		DISTINCT a.num  as ConsecutiveNums
from
		Logs as a , Logs as b , Logs as c
where 
		a.num = b.num
		and b.num = c.num=0 
		and a.id - b.id=1
		and b.id - c.id=1
方法二:
select
		distinct t.num as ConsecutiveNums
from
		(SELECT 
					id,
					num,
					row_number() over(order by id) - row_number() over(partition by num order by id) as newNum
			FROM
					Logs) as t
group by
			t.num,t.newNum
having
			count(t.t.newNum)>=3
# select
# 		distinct t.num as ConsecutiveNums
# from
# 	(select
# 			a.num,
# 			a.groupId-b.groupNum as newNum
# 	from
# 			(SELECT 
# 					id,
# 					num,
# 					row_number() over(order by id) as groupId
# 			FROM
# 					Logs) as a join 		
# 			(SELECT 
# 					id,
# 					num,
# 					row_number() over(partition by  num) as groupNum
# 			FROM
# 					Logs) as b  on a.id = b.id) as t
# group by
# 			t.newNum
# having
# 			count(t.newNum)>=3

1459. 矩形面积
在这里插入图片描述
写一个 SQL 语句,报告由表中任意两点可以形成的所有 边与坐标轴平行面积不为零的矩形。

结果表中的每一行包含三列 (p1, p2, area) 如下:

  1. p1 和 p2 是矩形两个对角的 id
  2. 矩形的面积由列 area 表示

请按照面积=== area 大小降序排列;如果面积相同的话, 则按照 p1 升序排序;若仍相同,则按 p2 升序排列。===

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

select 
		p1.id as P1,
		p2.id as P2,
		abs(p1.x_value - p2.x_value) * abs(p1.y_value - p2.y_value) as AREA
from
		Points as p1 , Points as p2 
where 
		p1.id != p2.id and abs(p1.x_value - p2.x_value) * abs(p1.y_value - p2.y_value) >0
		and p1.id < p2.id
order by
		area desc,
		p1 asc,
		p2 asc

1988. 找出每所学校的最低分数要求
在这里插入图片描述
在这里插入图片描述
每年,学校会公布学生申请所需的最低分数要求。学校根据所有学生的考试成绩来决定其最低分数要求。

  1. 学校希望确保即使每一个满足分数要求的学生都申请该学校,学校也有足够的能力接纳每一个学生。
  2. 学校也希望尽可能多的学生能申请该学校。
  3. 学校必须使用在 Exam 表中的 score 来作为最低分数要求。

编写一个SQL查询来查询每所学校的最低分数要求。如果同时有多个score值满足上述要求,则选择其中最小的一个。如果数据不足以决定最低分数要求,那么输出 -1。

返回的结果表可以按任意顺序排序。

查询结果格式如下例所

在这里插入图片描述

方法一:
select
		a.school_id,
		ifnull(b.score , -1) as score
from
		Schools as a left join
		(select 
				s.school_id,
				min(e.score) as score
		from
				Schools as s ,Exam as e
		where 
				s.capacity >= e.student_count 
		group by
				s.school_id
		order by
				s.school_id) as b on a.school_id=b.school_id
方法二:(推荐)
select 
		s.school_id,
		ifnull(min(e.score) , -1) as score
from
		Schools as s left join Exam as e on s.capacity >= e.student_count 
group by
		s.school_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值