我有一个包含两个字段的表,如下所示,
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
请帮助
答案 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)