如何从表中获得最高分满记录?

时间:2012-12-08 07:32:28

标签: mysql sql greatest-n-per-group

我的表是:

╔════╦════════╦════════════╦════════════╦════════╗
║ ID ║ TESTID ║ SESSIONID  ║ TOTALSCORE ║ USERID ║
╠════╬════════╬════════════╬════════════╬════════╣
║  1 ║     10 ║ 55cff3fbfs ║        250 ║    972 ║
║  2 ║     10 ║ 55cff3fbfs ║        440 ║    972 ║
║  3 ║     11 ║ 66fdf3fbfs ║        500 ║    972 ║
║  4 ║     11 ║ 66fdf3fbfs ║        700 ║    972 ║
║  5 ║     12 ║ 77ksfjskfs ║        800 ║    972 ║
║  6 ║     12 ║ 77ksfjskfs ║        700 ║    972 ║
║  7 ║     13 ║ 8fsfskffsf ║        900 ║    972 ║
║  8 ║     13 ║ 8fsfskffsf ║        750 ║    972 ║
╚════╩════════╩════════════╩════════════╩════════╝

我需要通过提供用户标识来获得maxscore完整行

结果将是:

id  TestId sessionId     TotalScore   UserId
---|-----|------------|------------|---------
2  | 10  | 55cff3fbfs |     440    | 972
4  | 11  | 66fdf3fbfs |     700    | 972
5  | 12  | 77ksfjskfs |     800    | 972
7  | 13  | 8fsfskffsf |     900    | 972

所以请帮帮我.......如何在MYSQL中编写查询/存储过程

1 个答案:

答案 0 :(得分:4)

拥有子查询的想法是每个totalScore得到最大的TestID。然后将结果连接到表本身,前提是它在以下条件下匹配,子查询中的TestID和最大TotalScore与原始表上的值匹配。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT TestID, MAX(TotalScore) maxScore
            FROM tableName
            GROUP BY TestID
        ) b ON  a.TestID = b.TestID AND
                a.TotalScore = b.maxScore

输出

╔════╦════════╦════════════╦════════════╦════════╗
║ ID ║ TESTID ║ SESSIONID  ║ TOTALSCORE ║ USERID ║
╠════╬════════╬════════════╬════════════╬════════╣
║  2 ║     10 ║ 55cff3fbfs ║        440 ║    972 ║
║  4 ║     11 ║ 66fdf3fbfs ║        700 ║    972 ║
║  5 ║     12 ║ 77ksfjskfs ║        800 ║    972 ║
║  7 ║     13 ║ 8fsfskffsf ║        900 ║    972 ║
╚════╩════════╩════════════╩════════════╩════════╝