日期:2014-05-18  浏览次数:20552 次

如何求出成绩中接近总人数 80% 的那个分数
样本数据:
SQL code
学校    年级    班级    姓名    考号    语文
小学    3    2    黄雅文    302094    99
小学    3    2    左  潇    302022    98
小学    3    1    黄昌毅    302027    98
小学    3    1    熊  磊    302013    97
小学    3    2    刘思宇    302024    97
小学    3    2    郭佩婷    302034    97
小学    3    2    陈珂艺    302096    97
小学    3    3    王子恺    303007    97
小学    3    1    杨宇航    302003    96
小学    3    2    刘鸿林    302010    96
小学    3    1    刘雨露    302047    96
小学    3    1    谢思瑶    302109    96
小学    3    2    彭旗锐    303010    96
小学    3    3    赵梦欣    303011    96
小学    3    2    罗佳蔚    303014    96
小学    3    2    王玉娇    302002    95
小学    3    1    万超俊    302023    95
小学    3    2    杨洋铭    302032    95
小学    3    1    杜浩东    302101    95
小学    3    2    宋云笛    303002    95
小学    3    2    罗  杰    302056    94
小学    3    2    龚雅旭    302068    94
小学    3    1    刘羽雪    302095    94
小学    3    1    周鑫冉    302103    94
小学    3    1    王佳浩    302001    94
小学    3    1    张梦婷    302007    94
小学    3    2    杨  燚    302030    94
小学    3    1    曹丽萍    302051    94
小学    3    2    李孟豪    302064    93
小学    3    1    曹鑫阳    302065    93
小学    3    2    肖翔宸    302058    93
小学    3    1    杨  璐    302061    93
小学    3    1    曹丽婷    302091    93
小学    3    2    黄俊辉    302106    93
小学    3    2    李其瑞    302026    93
小学    3    1    李东豪    302041    93
小学    3    2    杨晓壹    302028    93
小学    3    2    吕  佳    302060    86
小学    3    2    张宇豪    302066    85
小学    3       2       王小明  302067  84


这40条记录,要求取出成绩中接近总人数 80% 的那个分数,
40*0.8=32 第32条记录的数据是:93,但是因为93分的人太多93分实际上是第37条记录,
37/40=0.925 为92.5%
所以要取上面的 94分,94分的记录是:28
28/40=0.7 为70% 和取93分的92.5比较起来,94分最接近总人数的 80% 所以要取94分。

求算法和解题思路。

------解决方案--------------------
大致可以这么算:
SQL code

declare @temp int = (select COUNT(1) from 表格)
        , @sql varchar(1000) = 'with tmptable as ('

set @temp = @temp* 0.8

set @sql =@sql + 'select top ' + convert(varchar(10),@temp) + ' * from 表格 order by 语文) select top 1 * from tmptable order by 语文 desc'

exec(@sql)

------解决方案--------------------
楼上的这个貌似还是93