oracle如何只遍历一遍就查找到应得数据(Sorry,实在难以描述...详请见下)

gKiwi 发布于 2013/09/22 21:38
阅读 426
收藏 0

华为云11月刊推送:DIY微信问答机器人,高性能计算代码的20个技巧!>>>

类似如下图,假设一个student有9门课程.我需要找出一些学生,每个学生满足:有且只有一门课在90分以上,and 有且有一门课在60分一下.如果完全扫表两遍我也可以查询出来,但是效率很差(因为表数据在几百万级别).oracle有没有什么函数支持这个?
另外一个问题就是这个问题如何用一句话描述?有没有专业的术语可以用来给搜索引擎用?我都不晓得该如何搜索...

在此请教各路前辈,非常感谢.

加载中
0
mark35
mark35

student是学生表,课程表结构呢? stsudent.name是课程名么 ,满分多少

才几百万数据,如果score字段上有索引性能不可能差呀

gKiwi
gKiwi
这个是个办法. 但是实际项目中这个是枚举值(有限几个),创建索引意义不大.主要还是想通过一次遍历解决
mark35
mark35
回复 @gKiwi : 你可以考虑创建部分索引,只对小于60或者大于90的scroe
gKiwi
gKiwi
不好意思,确实是我描述的不够清楚...上面的表不可以称为student表.name为学生名称,score是分数.(不考虑课程表,就假设只有分数吧~).真是情况score这个其实是个枚举值,只有几个,索引效果不是太好.
0
mark35
mark35

给个笨办法试试,假定满分100, student.id是学号, student.name是课程名

SELECT id FROM student WHERE score > 90 OR score < 60
  GROUP BY id
  HAVING count(id) = 2 AND sum(score) < 182 AND sum(score) > 118
  ORDER BY id;


gKiwi
gKiwi
这个我明天拿去试试效率.因为还要关联其他表,所以跑起来用了几十秒....
0
純白陰影
純白陰影
自定义函数做条件,万事大吉
返回顶部
顶部