你的位置:
问答吧
-> 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]. "
";
}
作者: huaiping
发布时间: 2007-02-09
当以上的 $num = 6 时,显示的结果是:
20205
20261
而不是我想要的正确结果(实际上并列第6名的有两个202班级的,都应该算):
20205
20212
20261
作者: huaiping
发布时间: 2007-02-09
SELECT id,avg(chinese) FROM test200702 WHERE id BETWEEN 20200 AND 20299 ORDER BY total DESC LIMIT $num;
作者: sstogz
发布时间: 2007-02-10
Thanks all the same!楼上的可能没太懂我的意思。
按所有班级学生的总分降序排列后,取年级前N名,在这年级总分前N名当中,计算班级202开头的那些学生语文的平均分。
作者: huaiping
发布时间: 2007-02-10
那么修改一下吧:
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;
作者: sstogz
发布时间: 2007-02-10
非常感谢sstogz!!!
id用大于和小于判断无法取出正确的结果,但是用between就可以。纳闷中。。。。。。
不过问题总算是解决了!
作者: huaiping
发布时间: 2007-02-10