mysql - 如何从表中获取最高分完整记录?

标签 mysql sql greatest-n-per-group

我的 table 是:

╔════╦════════╦════════════╦════════════╦════════╗
║ 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 中编写查询/存储过程

最佳答案

子查询的想法是它为每个 TestID 获取最大的 totalScore。然后将其结果连接到表本身,前提是它符合以下条件,即子查询中的 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 ║
╚════╩════════╩════════════╩════════════╩════════╝

关于mysql - 如何从表中获取最高分完整记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13775524/

相关文章:

mysql - 允许在 HAVING 子句中使用别名的性能影响

主题标签的 SQL 索引 View

sql - 从查询中获取具有最大日期的行

sql - 按 sku 分组,最大日期 SQL

php - Mysql Left Join with Group By 和 Between

mysql - 创建了一个 View 但之后失去了对基础表的特权

php - mysql datetime 和现在的 datetime 对象之间的差异

mysql - 选择 2 列并将列显示为 1 列

java - Hibernate + Spring with Oracle - 使用分层查询(START WITH + CONNECT BY)

mysql - 在按 group by 子句分组的每个组中仅选择 3 个具有 uniq 属性的第一个加入的项目