SQL一练:找出每个班级年龄最大的2个人

128人浏览 / 0人评论 / 添加收藏

1、表数据如下:

SQL分析:

既然需要处理每个班级年龄最大的话,那么首先分析下年龄。

①如果年龄是处于10,11,12,13,14,15,16的数字序列的话。那么我们可以分析下如何取出15,16这2个值。

细细的看一下,要取出2个值的话,是不是可以只要大于14的就可以了,那如何定位到14?如果定位到13会有什么区别:

1)13  14 15 16 

2)14 15 16

再扩展开来看看,如果是12会如何?

1)12 13 14 15 16

2)13  14 15 16 

3)14 15 16

可以看出它是一个梯度下降,大于12的数字有4个,大于13的有3个,大于14是2个,大家找出规律没有,我们只要拿出每个值去判断一下,只要统计出大于14的值是小于3个的话,那我们就取出来了。

SQL如下:

SELECT
* 
FROM
student a
WHERE
( SELECT count(age) FROM student AS s1 WHERE s1.class=a.class AND s1.age > a.age ) <2;

分析一下:我从student表取一条值,这条值作为子查询(subquery)的条件到里面去判断,只要count的值是小于2的即可,因为age=15传递进去,count的值为1,因为age=15这条值是算在外部的,符合条件,所以我们只需要子查询的结果小于2即可。

得出的结果为:

 

其实该问题想到了就很好处理,平常没处理还不好想。这是mysql5.7版本的语法,新版本8.0有窗口函数可以处理。

全部评论