标题:如何选取前几名学生,同分自动顺延选取
只看楼主
lsd1981
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-10-30
结帖率:0
已结贴  问题点数:20 回复次数:16 
如何选取前几名学生,同分自动顺延选取
假如有一个数据库有100条数据,已经按照总分排序,如何选取前5名(或前百分之50),当总分相同时,自动顺延选择。请多多指教。
我想把前5名或前百分之50的数据选择出来,生成另一个表。
例如,选择总分排名前5名,选出的结果应为A1至A8。请问怎么实现自动顺延选择,例如 sele top或其他的命令。

数据表格式如下:

姓名    总分
A1    100
A2    99
A3    98
A4    97
A5    95
A6    95
A7    95
A8    95
A9    92
A10    91


[此贴子已经被作者于2017-10-30 15:34编辑过]

搜索更多相关主题的帖子: 学生 自动 数据 总分 选择 
2017-10-30 14:10
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:4 
降序唯一性排序,前几条记录分数就是前几名的分数。
2017-10-30 14:56
lsd1981
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-10-30
得分:0 
回复 2楼 吹水佬
我想把前5名或前百分之10的数据选择出来,生成另一个表
2017-10-30 15:03
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:4 
你这个问题,先进行排名,然后,就可以直接取了.如:
姓名    总分  排名
A1    100     1
A2    99      2
A3    98      3
A4    97      4
A5    95      5
A6    95      5
A7    95      5
A8    95      5
A9    92      9
A10    91     10

源表上增加排名,然后
select * from 源表 where 排名 <=5 into cursor tmp_源表
2017-10-30 15:45
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 4楼 mywisdom88
对了,是要考虑排名规则。
2017-10-30 16:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:4 
有了名次问题不就解决了吗

坚守VFP最后的阵地
2017-10-30 17:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
如果是VFP9,前面还要加一行代码 =SYS(3099,70) 否则达不到楼主的要求
* 前5名
select top 5 * from tt order by cj desc
* 前50%
select top 50 percent * from tt order by cj desc



[此贴子已经被作者于2017-10-30 22:58编辑过]


坚守VFP最后的阵地
2017-10-30 22:56
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:4 
我一般采取:
先获取前5名中的最小分数,然后获取大于等于该分数的人员信息。
前50%如法炮制。
2017-10-31 07:52
booksoon
Rank: 2
等 级:论坛游民
威 望:3
帖 子:19
专家分:67
注 册:2017-10-30
得分:4 
程序代码:

SELECT * FROM (
select T.*,RANK() OVER(PARTITION BY 姓名 order by 总分 desc) RN
FROM T
)WHERE RN<=10



[此贴子已经被作者于2017-10-31 10:44编辑过]

2017-10-31 10:43
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用booksoon在2017-10-31 10:43:13的发言:



SELECT * FROM (
select T.*,RANK() OVER(PARTITION BY 姓名 order by 总分 desc) RN
FROM T
)WHERE RN<=10

你这段代码在VFP中行不通啊

坚守VFP最后的阵地
2017-10-31 10:51



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




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

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