使用单个和快速SQL查询获取数据

Ale*_*lex 1 sql performance

我有以下数据:

ExamEntry   Student_ID     Grade
  11           1             80
  12           2             70
  13           3             20
  14           3             68
  15           4             75
Run Code Online (Sandbox Code Playgroud)

我想找到所有通过考试的学生.在这种情况下,如果一个学生参加的考试很少,我需要找到最后的结果.

所以,在这种情况下,我会让所有学生都通过.

我可以通过一个快速查询找到它吗?我是这样做的:

  1. 通过Student_ID从数据组中选择max(ExamEntry)来查找条目列表

  2. 查找结果:

从()中的ExamEntry数据中选择ExamEntry.

但这非常慢 - 我得到大约1000个条目,这个2步过程需要10秒.

有没有更好的办法?

谢谢.

Jac*_*cco 6

如果你的查询在你的表中有1000条记录非常慢,那就有问题了.对于现代数据库系统,包含1000个条目的表被认为非常小.
最有可能的是,你没有为你的桌子提供(主要)钥匙?

假设如果学生至少在成绩之上超过所需的最低要求,则适当的查询将是:

SELECT 
  Student_ID
, MAX(Grade) AS maxGrade
FROM table_name
GROUP BY Student_ID
HAVING maxGrade > MINIMUM_GRADE_NEEDED
Run Code Online (Sandbox Code Playgroud)

如果你真的需要最新成绩高于最低成绩:

SELECT 
  Student_ID
, Grade
FROM table_name
WHERE ExamEntry IN ( 
    SELECT 
      MAX(ExamEntry) 
    FROM table_name 
    GROUP BY Student_ID
)
HAVING Grade > MINIMUM_GRADE_NEEDED
Run Code Online (Sandbox Code Playgroud)