繁体   English   中英

实现此查询的最有效方法是什么[暂停]

[英]What is the most efficient way of implementing this query [on hold]

假设问题是“查找每个学生都获得 A 的课程”

这是数据库结构https://cdn.discordapp.com/attachments/586939958002974731/634770900058767405/unknown.png

下来你可以找到我试过的,但有没有更简单的方法来做到这一点。 如果这些数据包含 A - 或 B+ 等,那又会怎样呢?

-----------------------------First Attempt-----------------------------------
SELECT c.cname
FROM reg r, course c
WHERE c.cno=r.cno
GROUP BY c.cname
HAVING AVG(ROUND((CASE r.grade
WHEN 'A' THEN 4.0
WHEN 'B' THEN 3.0 
WHEN 'C' THEN 2.0
WHEN 'D' THEN 1.0
WHEN 'F' THEN 0.0
ELSE CAST(Grade AS int)
END),2)) = 4.0;
-----------------------------Second Attempt----------------------------------
SELECT c.cname
FROM reg r, course c
WHERE c.cno=r.cno
GROUP BY c.cname
HAVING MAX(r.grade) = 'A';

他们都在回答问题方面完成了工作(顺便说一句,查询结果是“无数据”,这是正确的,所以如果你们使用我提供给你们的数据重新运行我的特定场景,请不要感到惊讶。

在大多数数据库中,我希望这是最快的:

select c.*
from courses c
where not exists (select 1
                  from reg r
                  where r.cno = c.cno and r.grade <> 'A'
                 );

对于性能,您需要reg(cno, grade)上的索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM