Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获得平均分数高于某个值的教师所教授的课程_Sql_Relational Database - Fatal编程技术网

Sql 获得平均分数高于某个值的教师所教授的课程

Sql 获得平均分数高于某个值的教师所教授的课程,sql,relational-database,Sql,Relational Database,下面是两个表及其关系。教师可以教授一门以上的课程。课程与课程分数之间的关系为1:n。学生的分数存储在课程分数中 课程ID,tid*[1--n]课程ID*,sid*,分数 斜体属性是主键。标有*的属性是外键。比如,sid*是学生ID,tid*是教师ID 如何获得该教师所教课程的平均分数均在80分以上的教师ID 我在下面进行了尝试,但没有成功,因为它返回的数据比应该返回的多 从存在的课程中选择tid 从课程中选择avgscore\U分数自然加入课程 按avgscore>80的cid分组 您正在从课程

下面是两个表及其关系。教师可以教授一门以上的课程。课程与课程分数之间的关系为1:n。学生的分数存储在课程分数中

课程ID,tid*[1--n]课程ID*,sid*,分数

斜体属性是主键。标有*的属性是外键。比如,sid*是学生ID,tid*是教师ID

如何获得该教师所教课程的平均分数均在80分以上的教师ID

我在下面进行了尝试,但没有成功,因为它返回的数据比应该返回的多

从存在的课程中选择tid 从课程中选择avgscore\U分数自然加入课程 按avgscore>80的cid分组

您正在从课程中选择tid值;当然,您得到的行太多了

相反,请将查询的顶部改为:

SELECT tid FROM teacher
更新刚刚在规范中看到了以上所有内容

SELECT teacher.tid 
FROM teacher 
JOIN (
    SELECT tid,cid, avg(score) as avg_score
    FROM course_score
    JOIN course on course.cid = course_score.cid
    GROUP BY tid,cid
)scores
 on scores.tid = teacher.tid
GROUP BY teacher.tid
HAVING min(avg_score) > 80

将这个问题重新表述为“告诉我没有平均分数在80分或以下的课程的教师”更容易:

select
    tid
from
    teacher t
where
    not exists (
        select
            'x'
        from
            course_score cs
                inner join
            course c
                on cs.cid = c.cid
        where
            c.tid = t.tid
        group by
            c.cid
        having
            avg(score) <= 80
    );
对于是否应该包括教授过零课程的教师,可能存在一些争论


需要注意的一点是,计算整型字段的平均值可能很棘手,因为答案可能会四舍五入为整型。将其更改为avgcast score as decimal可解决此问题。

什么是不起作用的?这不是一个关系除法,在所有情况下都能给出正确答案吗?“这肯定比纠正OP已经有的东西要复杂得多。”PieterGeerkens即使有了你的修正,OP也会挑选至少教授过一门课程、平均成绩超过80分的老师。这个问题问的是所有课程的平均成绩都超过80分的教师。这将返回零记录。某个地方可能有问题。@canoe发布一些测试数据。您正在使用另一个很酷的解决方案!但子查询选择tid、cid、avgscore作为course_分数中的avg_分数可能不起作用,因为tid不在表course_分数中。