mysql降序排序后取第一条记录_怎么从mysql按某一字段降序排列后取出有并列数据的记录?...

你的位置:

问答吧

-> PHP

-> 问题详情

怎么从mysql按某一字段降序排列后取出有并列数据的记录?

想要求出学号为202开头的学生总分前N名的语文平均分。但是以下php语句查询后,$num取总分前7名的时候,显示出来的学号明显不对。请问:这个错在哪里?怎么改正?

学号 语文 数学 总分

20313 108 141 249

20114 114 134 248

20120 122 126 248

20205 109 139 248

20314 113 135 248

20125 113 134 247

20212 110 137 247

20261 113 134 247

20201 96 150 246

20307 113 133 246

$sql = "select avg(chinese) from (select id,total from test200702 where id > 20100 AND id < 20370 order by total desc limit 0,$num) as a where id like '202%'";

$query=mysql_query($sql);

while ($row = mysql_fetch_array($query)) {

echo $row[id]."
";

}

作者: nothing9

发布时间: 2007-02-09

当以上的 $num = 6 时,显示的结果是:

20205

20261

而不是我想要的正确结果(实际上并列第六名的有两个202班级的,都应该算):

20205

20212

20261

作者: nothing9

发布时间: 2007-02-09

终于解决了!

QUOTE:

SELECT avg(chinese) FROM ( SELECT * FROM test200702 WHERE id BETWEEN 20100 AND 20370 ORDER BY total DESC LIMIT $num ) AS a WHERE id BETWEEN 20200 AND 20299;

作者: nothing9

发布时间: 2007-02-10

有逻辑错误,当两个符合条件的记录正好处于 $num 和 $num+1 位置时,处理结果和你想要的结果不一致

作者: Namelessxp

发布时间: 2007-02-10

用一楼的数据,我试了一下,$num 取值 7,8,9 的时候,没发现有什么不对啊?

作者: nothing9

发布时间: 2007-02-12

晕,今天把这段代码又试了一下,果然还是有问题。

请问:怎么可以输出并列的数据啊?

作者: nothing9

发布时间: 2007-05-03

[Copy to clipboard] [ - ]CODE:

select avg(语文) from test200702 where 总分 >= (select 总分 from (select 总分 from test200702 where 学号 like '202%' group by 总分 order by 总分 desc limit 7) as temp order by 总分 limit 1) and 学号 like '202%'

可以处理总分并列的情况(前n名不止n个人)

可以处理前7名的总分实际只有3个(248 247 246)

我是用的postgresql语法来写,不晓得mysql认不认

作者: 夜猫子

发布时间: 2007-05-03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值