2013-12-09 57 views
2

我对SQL工作,我有以下问题:SQL WHERE条件获得第一和第二最大信号值

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; 

我只需要选择具有第一最大信号值和第二最大信号的行价值 ,自从昨天以来,我已经尝试了很多东西,但没有从中得到什么好处!

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

+0

考虑提供适当的DDLs和/或sqlfiddle与期望的结果一起 – Strawberry

回答

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; 

感谢大家对你的合作。

1

尝试:

ORDER BY grade DESC LIMIT 2 
+0

有没有2 BY ?! – flashdisk

+1

@flashdisk叶,我很明显地瞎了。 – Mihai

+0

我明白了,谢谢 – flashdisk

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不应该是必需的。

+0

这是什么意思?! – flashdisk

+0

@flashdisk。对不起。我不明白你的意思 –

+0

没关系我想通了,谢谢 – flashdisk

相关问题