1

我有一个包含两个字段的表,如下所示,

name    score
xyz      300
pqr      200
abc      300
mno      100
erp      200
yut      200

如何使用 MySQL 查询从上表中检索所有第二高分。尝试如下,

SELECT name, MAX( `score` )
FROM score
WHERE score < (
SELECT MAX( score )
FROM score )

但它返回单个值。

预期结果 ,

name    score
pqr      200
erp      200
yut      200

请提供任何帮助

4

4 回答 4

1

您可以使用:

SELECT 
  `name`,
  `score`
FROM 
  `score`
WHERE 
  `score`=(SELECT DISTINCT `score` FROM `score` ORDER BY `score` DESC LIMIT 1,1)

提示:命名表和它的列同名会导致复杂查询的麻烦(对你来说,不是对DBMS)

于 2013-09-11T06:30:11.330 回答
0

在 sqlfiddle 上创建了一个示例,它根据您的异常输出显示。

http://sqlfiddle.com/#!2/ce7a1/1

SELECT name, score
FROM score
WHERE score = (SELECT MAX(score) FROM score WHERE score < (SELECT MAX(score) FROM score))
于 2013-09-11T06:33:51.773 回答
0

如果第二高分数和逗号分隔的第二高分数名称列表很好,则可以使用如下所示的单个查询来完成

SELECT group_concat(name) as names,`score` FROM `score` group by `score` 
ORDER BY `score` DESC LIMIT 1,1
于 2013-09-11T06:35:36.150 回答
0

简单查询

SELECT name, score 
FROM score 
WHERE score=(SELECT DISTINCT score FROM score ORDER BY score DESC LIMIT 1,1)
于 2016-06-13T18:33:42.873 回答