我的表是:
╔════╦════════╦════════════╦════════════╦════════╗
║ 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中编写查询/存储过程
答案 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 ║
╚════╩════════╩════════════╩════════════╩════════╝