我有一个student_table表,其中包含两列student_name(带有uniqe约束),student_marks。从这张表中,我需要获得第三高分的学生的记录。
我试过了,但这是不正确的:
select * from student_table orderby(marks) enum(marks)=3;
如何更正此查询?
答案 0 :(得分:5)
这是一个非常简单的解决方案
select *
from marks
order by marks desc
limit 2,1
有限制你可以使用偏移量和长度。这里offset设置为2,因为它从0开始。对于第三个记录。 1是限制。
这是另一种解决方案
$res=mysql_query("SELECT * from marks order by marks desc");
mysql_data_seek($res, 2);
$row=mysql_fetch_assoc($res));
答案 1 :(得分:4)
试试这个
SELECT * FROM `student_table` ORDER BY marks DESC LIMIT 2,1
答案 2 :(得分:3)
答案 3 :(得分:1)
select * from students_table orderby marks limit 2,1
查看此网址,了解有关限制http://php.about.com/od/mysqlcommands/g/Limit_sql.htm
的更多信息答案 4 :(得分:1)
在MySQL中你可以这样做:
SELECT * FROM Student_Table ORDER BY Marks LIMIT 2, 1
答案 5 :(得分:0)
以下查询将返回第三名学生的所有记录,无论有多少学生被列为第一,第二或第三名。
SELECT student_table.name, student_table.marks
FROM student_table
WHERE student_table.primary_key IN ( SELECT ranked.primary_key
FROM student_table ranked
LEFT JOIN student_table others
ON ranked.marks < others.marks
GROUP BY 1
HAVING COUNT(DISTINCT others.marks) + 1 = 3)
例如,如果student_table
如下所示:
+---------+-------+
| name | marks |
+---------+-------+
| Alpha | 100 |
| Able | 100 |
| Bravo | 98 |
| Baker | 98 |
| Bone | 98 |
| Charlie | 93 | <-- 3rd place by marks
| Chimp | 93 | <-- 3rd place by marks
| Delta | 85 |
| Echo | 80 |
| Ebert | 80 |
+---------+-------+
查询将产生:
+---------+-------+
| name | marks |
+---------+-------+
| Charlie | 93 |
| Chimp | 93 |
+---------+-------+
顺便说一句,如果MySQL支持DENSE_RANK(),查询会更容易一些,但是您可以使用上面的子查询来模拟该函数。
答案 6 :(得分:0)
Use Below query
QUERY : select * from student_table where marks in (select marks from student_table group by marks order by marks desc limit 2,1);