数据库疑难问题

wangheng1700 2008-12-07 07:49:12
小弟有如下一段代码:
CREATE VIEW 奖学金评定(学号,姓名,性别,思想素质总分,专业素质总分,文化素质总分,身心素质总分,最后得分,等级)
AS
SELECT TOP 60
学生.学号,学生.姓名,学生.性别,
思想素质测评.最后得分,专业素质测评.最后得分,文化素质测评.最后得分,身心素质测评.最后得分,
思想素质测评.最后得分+专业素质测评.最后得分+文化素质测评.最后得分+身心素质测评.最后得分,
CASE
WHEN 成绩总览.大型数据库设计<60 OR 成绩总览.数据库原理<60 OR 成绩总览.大学英语<60 OR 成绩总览.线性代数<60 OR 成绩总览.数字逻辑<60 OR 成绩总览.毛概<60 THEN '挂科'

ELSE ''
END

FROM 学生,成绩,思想素质测评,专业素质测评,文化素质测评,身心素质测评,成绩总览

WHERE 思想素质测评.学号=学生.学号 AND 专业素质测评.学号=学生.学号 AND
文化素质测评.学号=学生.学号 AND 身心素质测评.学号=学生.学号 AND
成绩总览.学号=学生.学号

GROUP BY 学生.学号,学生.姓名,学生.性别,思想素质测评.最后得分,专业素质测评.最后得分,文化素质测评.最后得分,身心素质测评.最后得分,
成绩总览.大型数据库设计,成绩总览.数据库原理,成绩总览.大学英语,成绩总览.线性代数,成绩总览.数字逻辑,成绩总览.毛概
ORDER BY (思想素质测评.最后得分+专业素质测评.最后得分+文化素质测评.最后得分+身心素质测评.最后得分)
GO

但是查询起来非常得慢,要十几秒左右,有什么方法能够简化这个查询过程,或者查询速度的方法吗

另外如何在 “等级” 的列属性里面 按照最后总分(不包括挂科学生)的排名 人数的%5,%10,%30分别添加一等,二等,三等这些信息呢

望指教
...全文
185 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyrongg 2008-12-12
  • 打赏
  • 举报
回复
一看到表名或者字段名是中文的,头就发晕
yuedeem 2008-12-11
  • 打赏
  • 举报
回复
学习了~~~
nalnait 2008-12-11
  • 打赏
  • 举报
回复
study...
zhangyanxxxx 2008-12-11
  • 打赏
  • 举报
回复
1.在WHERE条件后面用到的字段上合理建立索引
2.例如CASE 后面的语句可以考虑违背范式思想,在表中插入数据的同时就把"挂科"等信息插入到表中,利用空间换取查询时间,在做数据仓库的时候经常采取这一方案,尤其是在CASE中使用OR语句,性能非常低下
3.GROUP BY子句在你的查询用没起到什么作用
4.你可以考虑把视图换成存储过程,同样能实现你要的效果,并且是预编译好的,性能方面要好些
5.视数据量大小而定,如果数据量大的话,需要对表进行分区
以上因素可以做为参考
yinqi025 2008-12-09
  • 打赏
  • 举报
回复
太多了...上厕所去
  • 打赏
  • 举报
回复
要判断等级的话
case 1.0*(select count(*) from tb where 总成绩>t.总成绩)/(select count(*) from tb where 总成绩>60)
when 0.05 then '一等' when 0.10 then '二等' when 0.3 then '三等'
end

试试
水族杰纶 2008-12-07
  • 打赏
  • 举报
回复
同意HEROWANG说法
楼主最好拿点数据来及想要的结果,
让大家看看是否有更加简单的方法
  • 打赏
  • 举报
回复
1、觉得你这个貌似不用group by吧
2、在相应列上建立索引,
3、试试在视图里面不要使用top,在查询的时候再top
4、加等级的再看看。
hecw123 2008-12-07
  • 打赏
  • 举报
回复
http://www.chinaunix.net/jh/20/83481.html

6,128

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 新技术前沿
社区管理员
  • 新技术前沿社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧