从mysql表中获取所有第二高的值

时间:2013-09-11 06:26:58

标签: mysql

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

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 个答案:

答案 0 :(得分:1)

您可以使用:

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

提示:命名表及其具有相同名称的列将导致复杂查询(对您而不是DBMS)的麻烦

答案 1 :(得分: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))

答案 2 :(得分:0)

如果第二高分和逗号分隔的第二高分的名单很好,可以使用下面的单个查询来完成

SELECT group_concat(name) as names,`score` FROM `score` group by `score` 
ORDER BY `score` DESC LIMIT 1,1

答案 3 :(得分:0)

简单查询

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