您的位置:首页 > 数据库

关于数据库统计查询的sql语句

2005-07-29 12:36 981 查看
在 网上看到了很多提问关于统计查询sql的写法, 其实问题的本质都一样, 能解决一个,就能解决所有的(我大胆的这样想.估计不完全正确). 这些问题的描述如下:
有这样一个表:

StudetNum
IDStudetNoClassnumeric
11Yw80
21SHUXUE90
31English60
42Yw60
52SHUXUE30
62English60
73Yw80
83SHUXUE40
93English40
104Yw20
114SHUXUE140
125English60
136English50
147Yw40
我对这个表作简单的介绍: 这个表存储学生的成绩. id是这个表的关键字段, studetno(我知道student是这样写的, 嘿嘿) 代表学生的学号, class是课程. numeric是成绩.

当然这个表是不够合理的, 暂且不讨论这个问题.等我下期再研究这个问题.

如果要得到下面的查询结果 ,该怎么作呢?

tongsuchaxun
studetnoYwEnglishSHUXUETotalAvg
180609023076.6666666666667
260603015050
380404016053.3333333333333
42014016080
5606060
6505050
7404040
目前大家可以清楚的看到这张学生课程成绩表中课程只有3种, 假设在应用程序中学生的课程不变, 那么如下sql将很简单的解决了问题:

select studetno, (select numeric from studetnum t1 where class= 'Yw' and t.studetno=t1.studetno) as Yw,
(select numeric from studetnum t2 where class= 'English' and t.studetno=t2.studetno) as English,
(select numeric from studetnum t3 where class= 'SHUXUE' and t.studetno=t3.studetno) as SHUXUE,
(select sum(numeric) from studetnum t4 where t.studetno=t4.studetno) as Total,
(select avg(numeric) from studetnum t5 where t.studetno=t5.studetno) as Avg from StudetNum t group by studetno

还有一种方法是把select子查询改成 case when 子句。

但是如果学生课程是可变的, 我需要得到这样的查询表格:
studetno class1 class2 class3 .... classN sum avg
1 68 96 80 .... 87 * *
.....................
.....................

那么该如何写一条具有伸缩弹性的sql语句呢?? 一条不行?? 那么就用存储过程,
可是假如数据库是access 的,你还会用存储过程嘛? 当然,你不会说一定要在程序逻辑中实现吧?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: