1

我有一个 student_table 表,其中有两列 student_name(具有 uniqe 约束),student_marks。从这张表中,我需要得到分数第三高的学生的记录。

我试过这个,但它不正确:

select * from student_table orderby(marks) enum(marks)=3;

如何更正此查询?

4

7 回答 7

5

这是一个非常简单的解决方案

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));
于 2012-04-04T11:32:12.787 回答
4

Try this

SELECT * FROM `student_table` ORDER BY marks DESC LIMIT 2,1
于 2012-04-04T12:06:48.230 回答
3

如果您只想要第三条记录:

SELECT * FROM student_table ORDER BY marks DESC LIMIT 2,1

阅读有关LIMIT命令的信息。

于 2012-04-04T11:27:05.237 回答
2

在 MySQL 中,您可以执行以下操作:

SELECT * FROM Student_Table ORDER BY Marks LIMIT 2, 1
于 2012-04-04T11:26:59.470 回答
1
select * from students_table orderby marks limit 2,1

检查此网址以了解有关限制http://php.about.com/od/mysqlcommands/g/Limit_sql.htm的更多信息

于 2012-04-04T11:26:41.857 回答
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(),查询会更容易一些,但是您可以使用上面的子查询来模拟该函数。

于 2012-04-04T17:13:23.407 回答
0

使用下面的查询
QUERY:select * from student_table where 标记(从 student_table 组中选择标记按标记顺序按标记 desc 限制 2,1);

于 2018-02-03T08:21:59.037 回答