我有一个 student_table 表,其中有两列 student_name(具有 uniqe 约束),student_marks。从这张表中,我需要得到分数第三高的学生的记录。
我试过这个,但它不正确:
select * from student_table orderby(marks) enum(marks)=3;
如何更正此查询?
这是一个非常简单的解决方案
select *
from marks
order by marks desc
limit 2,1
有限制你可以使用偏移量和长度。这里的偏移量设置为 2,因为它从 0 开始。对于第三条记录。1是极限。
这是另一个解决方案
$res=mysql_query("SELECT * from marks order by marks desc");
mysql_data_seek($res, 2);
$row=mysql_fetch_assoc($res));
Try this
SELECT * FROM `student_table` ORDER BY marks DESC LIMIT 2,1
在 MySQL 中,您可以执行以下操作:
SELECT * FROM Student_Table ORDER BY Marks LIMIT 2, 1
select * from students_table orderby marks limit 2,1
检查此网址以了解有关限制http://php.about.com/od/mysqlcommands/g/Limit_sql.htm的更多信息
以下查询将返回第三名学生的所有记录,无论有多少学生并列第一、第二或第三名。
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(),查询会更容易一些,但是您可以使用上面的子查询来模拟该函数。
使用下面的查询
QUERY:select * from student_table where 标记(从 student_table 组中选择标记按标记顺序按标记 desc 限制 2,1);