SQL一张表中查询任意两列大于某个值(下)

一个问题困扰着,总想找到好的解决方案。跟同学分享了该问题,真的是每个人的想法都是不一样。主要的是同学们都非常优秀。

1、解构问题,任意两门大于60分。总共的情况分三种,a.每门功课都小于60分;b.只有一门功课大于60分;c.任意两门功课大于60分。

脚本逻辑先查出来a和b的情况,然后排除掉就是想要的结果了。

分析:比上一篇的两种,方法还是比较笨,但是从分析问题的思路上变换了一个方式。

2、把所有的科目的成绩都转换成一列kemu,然后以人进行分组查询kemu中有两个值大于60的人员名字。

分析:行转列,上一篇中的行转列思路上陷入了一个奇怪的方向,走偏了。这一种行转列的思路是把所有的功课成绩都转成一列kemu,当数值整成一列,就可以用平常的思路进行处理了。

3、这种思路更棒,其实道理很简单,不知道为什么一碰到这个题的时候就是想不到。大于60的成绩直接默认标记为1,低于60的默认为0,这样就把整张表的数据变成了一个简单的二维方块。只要查询符合自己的标记,就能得到自己想要的结果。

分析,case when平常写sql的时候经常会用到。但是自己的发散性思维还是不够好。看到sql后感觉很简单,但是自己动手去写,总是写不出来。这就是眼高手低吧。

小结:后两种方法都是比较优秀的解法,从运行速度上来看,最后一种方法是耗时最少的(倒数第二种有几个聚合函数降低了效率)。大家还有什么更优质的解法可以一块讨论。


发现:一个问题钻牛角尖的话可以获得更多的东西。从一个问题,想出解决方案,从自己想到的笨方法到寻求帮助获得的优秀的解法。再去分析耗时,复杂度。再往下想还有许多要顺下去的东西。怎么分析这个sql运行的速率,遇到运行特别慢的应该怎样优化;这句sql放到不同的数据库中解析的方式有什么不同……

你可能感兴趣的:(SQL一张表中查询任意两列大于某个值(下))