请教如何统计成绩排名和同分人数
需要对数据表中的成绩信息,分专业依据zf从高到低统计排名,并统计同个专业中同分的人数效果如图:


[此贴子已经被作者于2023-2-28 16:50编辑过]
* 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
* 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
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