样本数据:
- 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.8set @sql [email protected] + 'select top ' + convert(varchar(10),@temp) + ' * from 表格 order by 语文) select top 1 * from tmptable order by 语文 desc'exec(@sql)
------解决方案--------------------
楼上的这个貌似还是93