标题:多次考试、多个班级、多个学科求平均分及名次问题
取消只看楼主
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
结帖率:87.5%
已结贴  问题点数:34 回复次数:12 
多次考试、多个班级、多个学科求平均分及名次问题
ChengJiBiao.zip (302.17 KB)

以上是示例数据

先前发了一贴,把问题简化了,本想用大家提供的思路自己慢慢摸索,无奈自己水平太菜。

我把完整的问题发上来,附上完整的数据(共24115条记录)

ChengJiBiao结构如下:

考试ID  班级ID  学号  语文  数学  外语  物理  化学  政治  历史  生物  地理  文科综合  理科综合  体育

说明:
考试ID:用来标识不同的考试(示例数据里共有23次考试)
班级ID:示例数据里每次考试有18个班参与
语文、数学、外语三个学科每次考试都参与,但其他学科并不是每次考试都参与了的,在示例数据里,没有参与该次考试的学科成绩为.NULL.

现在要求每个班在当次考试中每个学科的平均分,以及每个学科平均分在当次考试中的排名,排名时一定要“同分同名”。

想得到的结果如下:

考试ID  班级ID  语文平均分 语文名次 数学平均分 数学名次 外语平均分 外语名次 物理平均分 物理名次 ……
  1       1         85         4       90          2        76        16        60        8
  1       2         86         3       76          11       80         9        65        5
                                           ……
  1       18        94         2       87          4        70        18        70        3

  2       1         85         4       90          2        76        16        60        8
  2       2         86         3       76          11       80         9        65        5
                                           ……
  2       18        94         2       87          4        70        18        70        3

请大家给我点思路吧。

分数确实有点少,我目前只有34分了。

[ 本帖最后由 eepcvfp 于 2015-8-18 14:55 编辑 ]
搜索更多相关主题的帖子: 理科综合 文科综合 体育考试 化学 记录 
2015-08-18 14:04
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
刚才测试了一下,能够下载和打开啊?
2015-08-18 15:55
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
对,只是实际不会一次性处理这么多数据。
2015-08-18 17:24
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
也许这类处理正是VFP的强项,我相信,2W数据不算多。
2015-08-18 17:42
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
以下是引用TonyDeng在2015-8-18 17:44:45的发言:

你这个表是会随着时间的推移不断增大的,统计动作不能聚集在原表上。



那应该是怎么一个思想呢?请版主明示。
2015-08-18 18:19
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
谢谢版主的回复,我先细细研究一下您的代码。
2015-08-18 18:31
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
回复 12楼 sdta
谢谢 sdta 大侠,高手就是高手,您的代码完美解决我的问题。

原本我也是想用拼接SQL命令的方式来解决,但我以为有什么我不知道的命令或方法能解决这种 学科名不固定、学科数量不固定的统计。看来是没有了。

您的代码我有一处地方不太明白,请指教:
程序代码:
FOR LNI = 3 TO nFieldCount STEP 2
    A1 = 'CJTJB.' + aFieldList[LNI,1]  && 科目均分
    B1 = 'CJTJB.' + aFieldList[LNI+1,1]  && 科目名次
    A2 = 'B.' + aFieldList[LNI,1]  && 科目均分
    UPDATE CJTJB SET &B1=(SELECT COUNT(*)+1 FROM CJTJB B WHERE &A1.< &A2. AND CJTJB.考试ID = B.考试ID) FROM CJTJB WHERE &A1.<> 0
ENDFOR


UPDATE一句取 LNI = 3 的值为:
UPDATE CJTJB SET CJTJB.语文名次=(SELECT COUNT(*)+1 FROM CJTJB B WHERE CJTJB.语文均分< B.语文均分 AND CJTJB.考试ID = B.考试ID) FROM CJTJB WHERE CJTJB.语文均分<>0


这里的WHERE CJTJB.语文均分<>0 我不明白,是限制统计成绩不为.NULL.的吗?

如果 考试ID=1 这次考试 语文学科 没有参与,那么在 CJTJB 表中,语文均分 字段应该是 .NULL. 啊。

[ 本帖最后由 eepcvfp 于 2015-8-18 20:03 编辑 ]
2015-08-18 20:00
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
但我运行您的代码后 CJTJB 里没有参加考试的学科依然是.NULL.啊?不过 学科名次 字段是 0(零)。

这个论坛好像无法直接贴图,我只好把截图发一个附件了。

2015-08-18 20:40
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
Snap1.zip (163.39 KB)
2015-08-18 20:41
eepcvfp
Rank: 2
等 级:论坛游民
帖 子:166
专家分:15
注 册:2013-8-12
得分:0 
原来是这样,这就好理解了。

但我这边学科字段是允许NULL的,CJTJB 里没有参加考试的学科都是.NULL.,但为什么能运行通过呢?

学科字段为NULL也满足 &A1. <>0 对吗? 我以为必须要 not isnull(&A1.) 呢!


2015-08-18 20:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-456517-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.318868 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved