| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3473 人关注过本帖
标题:如何选取前几名学生,同分自动顺延选取
只看楼主 加入收藏
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
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册: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
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册: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
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 4楼 mywisdom88
对了,是要考虑排名规则。
2017-10-30 16:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:4 
有了名次问题不就解决了吗

坚守VFP最后的阵地
2017-10-30 17:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册: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: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1790
专家分:3409
注 册: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
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册: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
快速回复:如何选取前几名学生,同分自动顺延选取
数据加载中...
 
   



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

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