2

我的桌子是:

╔════╦════════╦════════════╦════════════╦════════╗
║ 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 ║
╚════╩════════╩════════════╩════════════╩════════╝

我需要通过提供用户 ID 来获得 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中编写查询/存储过程

4

1 回答 1

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 ║
╚════╩════════╩════════════╩════════════╩════════╝
于 2012-12-08T07:34:16.937 回答