| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1134 人关注过本帖
标题:请帮忙,寻求快速计算平均分(0分除外)的方法,谢谢!
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10566
专家分:43004
注 册:2014-5-20
收藏
得分:0 
回复 10楼 schtg
同一分类,0分虽不影响各学科的总分数,但0分的不计人数,各学科的总人数可能不是相同的,那就要分类分科统计总人数了。
能不能优化一下数据结构,分输入数据结构(原始数据结构)、输出数据结构(显示数据结构)
2023-08-16 16:07
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1585
专家分:3084
注 册:2012-2-29
收藏
得分:0 
回复 11楼 吹水佬
对方提供的数据就是这样的哈,只能分类分科统计啦。
2023-08-16 16:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10566
专家分:43004
注 册:2014-5-20
收藏
得分:0 
以下是引用schtg在2023-8-16 16:25:40的发言:

对方提供的数据就是这样的哈,只能分类分科统计啦。


原来的只有一个总人数字段,不符合你的要求。
试改结构分科分类统计人数,未校对
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
tm=SECONDS()

USE cj
DIMENSION afs[FCOUNT()-5]    && yw及之后的字段名列表
FOR i=6 TO FCOUNT()
     afs[i-5] = FIELD(i)
ENDFOR

    * 创建平均分表
cmd = "CREATE CURSOR pjf (dsdm n(6),xqdm n(8),xxdm n(10)"
FOR i=1 TO ALEN(afs)
    cmd = cmd + "," + afs[i]+"zrs I," + afs[i]+"pjf n(12,2)," + afs[i]+"lkpx I," + afs[i]+"bspx I," + afs[i]+"bxpx I"
ENDFOR
cmd = cmd + ")"
EXECSCRIPT(cmd)

? "从 cj 获取 xxdm 的人数和分数"
SELECT DISTINCT dsdm,xqdm,xxdm FROM cj ORDER BY dsdm,xqdm,xxdm INTO CURSOR tmp
SELECT * FROM pjf WHERE .t. INTO CURSOR pjf_xxdm READWRITE
APPEND FROM DBF("tmp")
INDEX on xxdm TAG tag_xxdm
SELECT cj
SET RELATION TO xxdm INTO "pjf_xxdm"
tj_rsfs("pjf_xxdm")
SET RELATION TO

? "从 pjf_xxdm 获取 xqdm 的人数和分数"
SELECT DISTINCT dsdm,xqdm FROM pjf_xxdm ORDER BY dsdm,xqdm INTO CURSOR tmp
SELECT * FROM pjf WHERE .t. INTO CURSOR pjf_xqdm READWRITE
APPEND FROM DBF("tmp")
INDEX on xqdm TAG tag_xqdm
SELECT pjf_xxdm
SET RELATION TO xqdm INTO "pjf_xqdm" 
tj_rsfs("pjf_xqdm")
SET RELATION TO

? "从 pjf_xqdm 获取 dsdm 的人数和分数"
SELECT DISTINCT dsdm FROM pjf_xqdm ORDER BY dsdm INTO CURSOR tmp
SELECT * FROM pjf WHERE .t. INTO CURSOR pjf_dsdm READWRITE
APPEND FROM DBF("tmp")
INDEX on dsdm TAG tag_dsdm
SELECT pjf_xqdm
SET RELATION TO dsdm INTO "pjf_dsdm"
tj_rsfs("pjf_dsdm")
SET RELATION TO

? "从 pjf_dsdm 获取总人数和总分数"
INSERT INTO pjf (dsdm) VALUES (0)
SELECT pjf_dsdm
tj_rsfs("pjf")

? "统计 各类平均分数"
tj_pjf("pjf")
tj_pjf("pjf_dsdm")
tj_pjf("pjf_xqdm")
tj_pjf("pjf_xxdm")

? "统计 联考名次、本市名次、本县名次"
FOR i=1 TO ALEN(afs)
    tj_mc(afs[i], "pjf_xqdm")
    tj_mc(afs[i], "pjf_xxdm")
ENDFOR

    * 整合各类表
SELECT pjf 
APPEND FROM DBF("pjf_dsdm")
APPEND FROM DBF("pjf_xqdm")
APPEND FROM DBF("pjf_xxdm")

? SECONDS()-tm
SELECT * FROM pjf 
CLOSE TABLES ALL 
RETURN

    * 统计人数分数
FUNCTION tj_rsfs(cAlias)
    SCAN 
        FOR i=1 TO ALEN(afs) 
            rs = EVALUATE(IIF(cAlias=="pjf_xxdm", "1",    afs[i]+"zrs"))
            fs = EVALUATE(IIF(cAlias=="pjf_xxdm", afs[i], afs[i]+"pjf")) 
            IF fs != 0
                REPLACE (cAlias+"."+afs[i]+"zrs") WITH EVALUATE(cAlias+"."+afs[i]+"zrs") + rs,;
                        (cAlias+"."+afs[i]+"pjf") WITH EVALUATE(cAlias+"."+afs[i]+"pjf") + fs
            ENDIF
        ENDFOR
    ENDSCAN
ENDFUNC

    * 统计平均分
FUNCTION tj_pjf(cAlias)
    SELECT (cAlias)
    SCAN     
        FOR i=1 TO ALEN(afs)
            rs = EVALUATE(afs[i]+"zrs")
            fs = EVALUATE(afs[i]+"pjf")
            IF rs != 0
                REPLACE (afs[i]+"pjf") WITH fs/rs
            ENDIF
        ENDFOR
    ENDSCAN
ENDFUNC

    * 统计 联考名次、本市名次、本县名次
FUNCTION tj_mc(kmm, cAlias)
    eKey = kmm+"pjf"
    SELECT (cAlias)
    INDEX on &eKey TAG kmm DESCENDING
    tj_lkpx(kmm)        &&联考名次
    INDEX on dsdm*1000+&eKey TAG kmm DESCENDING 
    tj_bspx(kmm)        &&本市名次  
    IF cAlias == "pjf_xxdm" 
        INDEX on xqdm*1000+&eKey TAG kmm DESCENDING 
        tj_bxpx(kmm)    &&本县名次
    ENDIF
ENDFUNC

    * 联考名次
FUNCTION tj_lkpx(kmm)
    m  = 1
    n  = 1
    fs = -1
    SCAN 
        IF EVALUATE(kmm+"pjf") != fs
            fs = EVALUATE(kmm+"pjf")
            m  = n
        ENDIF
        n = n + 1 
        REPLACE (kmm+"lkpx") WITH m
    ENDSCAN
ENDFUNC 

    * 本市名次
FUNCTION tj_bspx(kmm)
    m  = 1
    n  = 1
    fs = -1
    dm = 0
    SCAN 
        IF dsdm != dm
            dm = dsdm
            m = 1
            n = 1
        ENDIF 
        IF EVALUATE(kmm+"pjf") != fs
            fs = EVALUATE(kmm+"pjf")
            m  = n
        ENDIF
        n = n + 1 
        REPLACE (kmm+"bspx") WITH m
    ENDSCAN
ENDFUNC 

    * 本县名次
FUNCTION tj_bxpx(kmm)
    m  = 1
    n  = 1
    fs = -1
    dm = 0
    SCAN 
        IF xqdm != dm
            dm = xqdm
            m = 1
            n = 1
        ENDIF 
        IF EVALUATE(kmm+"pjf") != fs
            fs = EVALUATE(kmm+"pjf")
            m  = n
        ENDIF
        n = n + 1 
        REPLACE (kmm+"bxpx") WITH m
    ENDSCAN
ENDFUNC
2023-08-16 22:57
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1585
专家分:3084
注 册:2012-2-29
收藏
得分:0 
回复 13楼 吹水佬
非常感谢!
2023-08-17 05:20
王咸美
Rank: 1
等 级:新手上路
帖 子:615
专家分:3
注 册:2018-1-4
收藏
得分:0 
原始数据表无法下载,程序无法学习消化,很遗憾!
2023-08-20 08:53
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
回复 13楼 吹水佬
吹版主,运行了很长时间,不出结果呢,不知什么原因,谢谢勤劳的版主
2023-08-21 01:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10566
专家分:43004
注 册:2014-5-20
收藏
得分:0 
以下是引用jinanshui在2023-8-21 01:48:14的发言:

吹版主,运行了很长时间,不出结果呢,不知什么原因,谢谢勤劳的版主

1分钟左右吧
2023-08-21 10:23
jinanshui
Rank: 2
等 级:论坛游民
帖 子:294
专家分:67
注 册:2009-10-6
收藏
得分:0 
吹版,您好,我试了好多次,怎么一直运行,停不下来,i5,16G内存,vfp9.0,请您看看,谢谢,我是个大菜鸟。
程序10.rar (1.19 KB)


[此贴子已经被作者于2023-8-21 16:29编辑过]

2023-08-21 16:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10566
专家分:43004
注 册:2014-5-20
收藏
得分:0 
以下是引用jinanshui在2023-8-21 16:25:56的发言:

吹版,您好,我试了好多次,怎么一直运行,停不下来,i5,16G内存,vfp9.0,请您看看,谢谢,我是个大菜鸟。


cj表与prg路径相同,并设置prg为当前默认路径。
找不到cj表,测试不了。
2023-08-23 18:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10566
专家分:43004
注 册:2014-5-20
收藏
得分:0 
回复 18楼 jinanshui
LZ的数据在下载频道,见1楼连接
测试用了50几秒(i3 U、16G ram、ssd HD)
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2023-8-24 08:53编辑过]

2023-08-24 08:51
快速回复:请帮忙,寻求快速计算平均分(0分除外)的方法,谢谢!
数据加载中...
 
   



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

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