我正在研究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之类的东西时,我会得到一个聚合函数的错误,因为我尽我所能,所以我会帮助我!
答案 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;
感谢大家的合作。