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有窗口函数可以处理。
All comments