首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL优化查询

MySQL优化查询
EN

Database Administration用户
提问于 2012-07-13 20:53:25
回答 1查看 475关注 0票数 3

现在我遇到了一个问题,我的桌子如下:

代码语言:javascript
复制
Task Id       StudentId    Marks
  1                1         12
  1                2         15              
  1                3         17
  2                1         15 
  2                3         20
  3                1         8 
  3                3         5         
  3                5         17

我被要求得到一个学生名单谁有最大和分数在每项任务。因此,所需的输出是:

TaskId StudentId标记

代码语言:javascript
复制
 1                    3            17
 2                    3            20
 3                    5            17

现在,我创建了一个临时表来存储每个任务的max.marks。

TaskId Max.Marks

代码语言:javascript
复制
 1     17
 2     20
 3     17

然后,我将临时表加入到主表,并以等于该任务的max.marks的标记获取行。

谁能建议一个更好的查询没有任何子查询和临时表?

谢谢

EN

回答 1

Database Administration用户

发布于 2012-07-14 12:11:51

使用子查询(派生表)代替临时表,然后将其连接到原始标记表:

代码语言:javascript
复制
SELECT
    t.TaskId, t.StudentId, t.Marks 
FROM
        tableX AS t
    JOIN 
        ( SELECT 
              TaskID
            , MAX(Marks) AS MaxMarks
          FROM 
              tableX
          GROUP BY
              TaskID
        ) AS m
            ON  m.TaskId = t.TaskId
            AND m.MaxMarks = t.Marks ;

如果您有一个关于(TaskId, Marks, StudentId)的索引,它将有助于提高效率。

您还可以使用此变体:

代码语言:javascript
复制
SELECT
    t.TaskId, t.StudentId, t.Marks 
FROM
        ( SELECT DISTINCT
              TaskId
          FROM
              tableX
        ) AS dt
    JOIN 
        tableX AS t
            ON  t.TaskId = dt.TaskId
            AND t.Marks = 
                ( SELECT 
                      tm.Marks 
                  FROM 
                      tableX AS tm
                  WHERE
                      tm.TaskId = dt.TaskId
                  ORDER BY 
                      tm.Marks DESC
                  LIMIT 1
                ) ;
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/20882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档