请教如何统计成绩排名和同分人数
需要对数据表中的成绩信息,分专业依据zf从高到低统计排名,并统计同个专业中同分的人数效果如图:
[此贴子已经被作者于2023-2-28 16:50编辑过]
2023-02-28 16:46
程序代码:* VFP9 代码
CLOSE DATABASES
SELECT * FROM DBF\aa ORDER BY bkzydm, zf DESC INTO CURSOR temp READWRITE
BLANK FIELDS pm, bl ALL
lczydm = SPACE(0)
lnzf = 0
lnzrs = 0
SCAN
lnzrs = lnzrs + 1
IF bkzydm == lczydm
IF zf != lnzf
lnmc = lnzrs
lntf = 1
ELSE
lntf = lntf + 1
ENDIF
ELSE
lnmc = 1
lnzrs = 1
lntf = 1
ENDIF
REPLACE pm WITH lnmc, bl WITH lntf
lczydm = bkzydm
lnzf = zf
lnmc = pm
ENDSCAN
BROWSE

2023-02-28 18:05
2023-03-01 08:18
2023-03-01 08:29
程序代码:* VFP9 代码
CLOSE DATABASES
SELECT * FROM DBF\aa ORDER BY bkzydm, zf DESC INTO CURSOR temp READWRITE
BLANK FIELDS pm, bl ALL
lczydm = SPACE(0)
lnzf = 0
lnzrs = 0
lntf1 = 1
SCAN
lnzrs = lnzrs + 1
IF bkzydm == lczydm
IF zf != lnzf
lnmc = lnzrs
IF lntf > 1
lnrec = RECNO()
lnrec1 = lnrec - 1
FOR ln = 1 TO lntf - 1
lnrec1 = lnrec1 - 1
GO lnrec1
REPLACE bl WITH lntf
ENDFOR
GO lnrec
lntf = 1
ENDIF
ELSE
lntf = lntf + 1
ENDIF
ELSE
lnmc = 1
lnzrs = 1
lntf = 1
ENDIF
REPLACE pm WITH lnmc, bl WITH lntf
lczydm = bkzydm
lnzf = zf
lnmc = pm
ENDSCAN
BROWSE

2023-03-01 09:09

2023-03-01 09:11
2023-03-01 11:24
程序代码:
SET ENGINEBEHAVIOR 70
SELECT 0000 id, bkzydm, xm, zf, 0000 pm, 0000 bl FROM aa ORDER BY bkzydm, zf DESC INTO CURSOR tmp READWRITE
SELECT bkzydm, zf, COUNT(*) bl FROM tmp GROUP BY bkzydm, zf INTO CURSOR tmp_bl
UPDATE tmp SET id=RECNO(),pm=1,bl=tmp_bl.bl from tmp_bl WHERE tmp.bkzydm==tmp_bl.bkzydm AND tmp.zf==tmp_bl.zf
UPDATE tmp;
SET pm=IIF(tmp.bkzydm!=b.bkzydm, 1, IIF(tmp.zf==b.zf, b.pm, b.pm+b.bl));
from tmp b WHERE b.id==tmp.id-1
SELECT * FROM tmp
2023-03-01 11:42
2023-03-01 14:01