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]. "
";

}

作者: 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

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页