sql where条件获取第一个和第二个最大值

时间:2013-12-09 16:10:21

标签: mysql sql

我正在研究SQL,我遇到了以下问题:

    select * from(
    select tname,teacher.tid,grade from teacher 
    inner join
    _view
    on(_view.tid=teacher.tid))as D
    group by grade
    where // what should I do here to get the rows having the first and the second   maxium values?
    order by grade desc,tid;

我想只选择具有第一个maxium值和第二个maxium值的行 我从昨天开始尝试过很多东西,但没有任何好处!!

当我使用MAX,COUNT或AND之类的东西时,我会得到一个聚合函数的错误,因为我尽我所能,所以我会帮助我!

3 个答案:

答案 0 :(得分:1)

尝试:

ORDER BY grade  DESC LIMIT 2

答案 1 :(得分:1)

我相信你可以做到:

select tname,teacher.tid,grade 
from teacher 
inner join _view on _view.tid=teacher.tid
order by grade desc,tid
limit 2;

LIMIT 2可以获得您从SELECT中获得的列表的前两行。由于您按等级desc订购,因此将返回两个最高等级的记录。

来自docs

  

LIMIT子句可用于约束返回的行数   通过SELECT语句。 LIMIT需要一个或两个数字参数,   必须都是非负整数常量(使用时除外)   准备好的陈述)。

您还在进行派生查询,但如果您没有对其进行任何操作,我无法理解为什么您需要它。并且GROUP BY不应该是必要的。

答案 2 :(得分:1)

好吧,经过太多的思考我得到了正确和平稳的工作,更多的TOP在查询结束时只能LIMIT,这是我的答案:

select * from(
select tname,teacher.tid,grade from teacher 
inner join
_view
on(_view.tid=teacher.tid)
)as D
where grade in(select grade from  _view order by grade desc limit 2)
order by grade desc,tid;

感谢大家的合作。