| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4225 人关注过本帖, 1 人收藏
标题:不同分数段人数统计的简易方法
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9803
专家分:26906
注 册:2012-2-5
结帖率:88.24%
收藏(1)
 问题点数:0 回复次数:32 
不同分数段人数统计的简易方法
程序代码:
* 不同分数段人数统计,分数为整数
* 测试表
CREATE CURSOR CJK (CJ N(3))
INSERT INTO CJK VALUES (15)
INSERT INTO CJK VALUES (28)
INSERT INTO CJK VALUES (35)
INSERT INTO CJK VALUES (8)
INSERT INTO CJK VALUES (2)
INSERT INTO CJK VALUES (4)
INSERT INTO CJK VALUES (9)
INSERT INTO CJK VALUES (64)
INSERT INTO CJK VALUES (75)
INSERT INTO CJK VALUES (65)
INSERT INTO CJK VALUES (125)
INSERT INTO CJK VALUES (115)
INSERT INTO CJK VALUES (27)
INSERT INTO CJK VALUES (88)

SELECT MIN(CJ) CJ1,MAX(CJ) CJ2 FROM CJK INTO ARRAY ACJ
* 获取最低分及最高分
NMIN=ACJ(1,1)
NMAX=ACJ(1,2)
* 如果设置10分为一个分数段
NUM=10 && 此处可以改为任意数值
NMIN=FLOOR(NMIN/NUM)*NUM   && 最低分数段的开始分
NMAX=IIF(MOD(NMAX,NUM)=0,(CEILING(NMAX/NUM)+1)*NUM,CEILING(NMAX/NUM)*NUM) && 最高分数段的终止分

* 分数段生成
CREATE CURSOR FSD (FS1 N(3),FS2 N(3)) && 保存分数段的临时表
FOR I=NMIN TO INT(NMAX/NUM)-1
    IF I=NMIN
       INSERT INTO FSD VALUES (I,(I+1)*NUM-1)
    ELSE
       INSERT INTO FSD VALUES (NUM1,(I+1)*NUM-1)
    ENDIF
    NUM1=(I+1)*NUM
ENDFOR
SELECT *,000 RS FROM FSD WHERE .F. INTO CURSOR CJTJ READWRITE && 保存统计结果的临时表
SELECT FSD
SCAN
   INSERT INTO CJTJ SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2)
ENDSCAN
SELECT CJTJ
BROWSE


[ 本帖最后由 sdta 于 2014-3-14 19:52 编辑 ]
收到的鲜花
  • tlliqi2014-03-14 19:56 送鲜花  20朵   附言:方法不错
搜索更多相关主题的帖子: 测试表 color 统计 
2014-03-14 19:35
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
方法不错
2014-03-14 19:56
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1546
专家分:3003
注 册:2012-2-29
收藏
得分:0 
谢谢!
2014-03-14 22:18
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
INSERT INTO CJTJ SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2)
上述语句如何修改能在VFP6下运行?
2014-03-17 09:35
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
请教“不同分数段人数统计,分数为整数”中的有关代码
以下是引用sdta在2014-3-14 19:35:43的发言:

* 不同分数段人数统计,分数为整数
* 测试表
CREATE CURSOR CJK (CJ N(3))
INSERT INTO CJK VALUES (15)
INSERT INTO CJK VALUES (28)
INSERT INTO CJK VALUES (35)
INSERT INTO CJK VALUES (8)
INSERT INTO CJK VALUES (2)
INSERT INTO CJK VALUES (4)
INSERT INTO CJK VALUES (9)
INSERT INTO CJK VALUES (64)
INSERT INTO CJK VALUES (75)
INSERT INTO CJK VALUES (65)
INSERT INTO CJK VALUES (125)
INSERT INTO CJK VALUES (115)
INSERT INTO CJK VALUES (27)
INSERT INTO CJK VALUES (88)
 
SELECT MIN(CJ) CJ1,MAX(CJ) CJ2 FROM CJK INTO ARRAY ACJ
* 获取最低分及最高分
NMIN=ACJ(1,1)
NMAX=ACJ(1,2)
* 如果设置10分为一个分数段
NUM=10 && 此处可以改为任意数值
NMIN=FLOOR(NMIN/NUM)*NUM   && 最低分数段的开始分
NMAX=IIF(MOD(NMAX,NUM)=0,(CEILING(NMAX/NUM)+1)*NUM,CEILING(NMAX/NUM)*NUM) && 最高分数段的终止分
 
* 分数段生成
CREATE CURSOR FSD (FS1 N(3),FS2 N(3)) && 保存分数段的临时表
FOR I=NMIN TO INT(NMAX/NUM)-1
    IF I=NMIN
       INSERT INTO FSD VALUES (I,(I+1)*NUM-1)
    ELSE
       INSERT INTO FSD VALUES (NUM1,(I+1)*NUM-1)
    ENDIF
    NUM1=(I+1)*NUM
ENDFOR
SELECT *,000 RS FROM FSD WHERE .F. INTO CURSOR CJTJ READWRITE && 保存统计结果的临时表
SELECT FSD
SCAN
   INSERT INTO CJTJ SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2)
ENDSCAN
SELECT CJTJ
BROWSE
NUM1=(I+1)*NUM此句有何作用?
INSERT INTO CJTJ SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2)
此句如何必改成能VFP6下能运行?
2014-03-17 10:21
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用sylknb在2014-3-17 09:35:13的发言:

 INSERT INTO CJTJ SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2)
上述语句如何修改能在VFP6下运行?
SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2) INTO TABLE ABC
USE CJTJ
APPEND FROM ABC
USE IN ABC
ERASE ABC.DBF

嫌烦的话也可以找数组帮忙:
SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2) INTO ARRAY ABC
USE CJTJ
APPEND FROM ARRAY ABC


[ 本帖最后由 taifu945 于 2014-3-17 10:44 编辑 ]
2014-03-17 10:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
勸不聽的,到現在還死守VFP6,不是做事的,是應考的。

[ 本帖最后由 TonyDeng 于 2014-3-17 11:06 编辑 ]

授人以渔,不授人以鱼。
2014-03-17 11:00
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1528
专家分:180
注 册:2006-6-3
收藏
得分:0 
SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2) INTO TABLE ABC
USE CJTJ
APPEND FROM ABC
USE IN ABC
ERASE ABC.DBF
运行结果是 cjtj中没有内容。
2014-03-17 11:45
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用sylknb在2014-3-17 11:45:50的发言:

SELECT FSD.FS1,FSD.FS2,COUNT(*) RS FROM CJK WHERE BETWEEN(CJK.CJ,FSD.FS1,FSD.FS2) INTO TABLE ABC
USE CJTJ
APPEND FROM ABC
USE IN ABC
ERASE ABC.DBF
运行结果是 cjtj中没有内容。
你运行完第一条命令后先看看ABC中有没有数据,如果有数据,再看看CJTJ与ABC表结构是否相同。我这里实验过,是有结果的。要是你那实在不行,就用第二种方法,通过数组追加。
2014-03-17 13:27
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用TonyDeng在2014-3-17 11:00:36的发言:

勸不聽的,到現在還死守VFP6,不是做事的,是應考的。
哈哈,是的,不知道这些还在用VFP6的人是什么想法。
2014-03-17 13:27
快速回复:不同分数段人数统计的简易方法
数据加载中...
 
   



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

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