select  姓名,yzhp_course.课程名,
yzhp_grade.平时*0.1+yzhp_grade.期中*0.2+yzhp_grade.期末*0.7 as 最高总评
from yzhp_grade,yzhp_course,yzhp_student
where yzhp_grade.课程代号=yzhp_course.课程代号
and yzhp_grade.学号=yzhp_student.学号
group by yzhp_course.课程名我的目的是:计算并显示每一门课程的课程名、最高总评分及对应的学生姓名 。但是现在由于group by的问题不能够实现,请教大家一下这个问题应该怎样修改?谢谢了

解决方案 »

  1.   

    select *
    from tb A
    where not exists (select 1 from tb B A.课程名=B.课程名 and A.分数<B.分数)
      

  2.   

    还是没怎么弄懂,不过可以先求出最高总评分,再求出课号,再进行连接应该可以的!!SELECT yzhp_grade.学号,MAX(yzhp_grade.平时*0.1+yzhp_grade.期中*0.2+yzhp_grade.期末*0.7) as 最高总评 
    FROM yzhp_grade
    GROUP BY yzhp_grade.学号
      

  3.   

    select * from (
    select  姓名,yzhp_course.课程名,yzhp_grade.平时*0.1+yzhp_grade.期中*0.2+yzhp_grade.期末*0.7 as 最高总评,
    row_number() over(partion by yzhp_course.课程名 order by yzhp_grade.平时*0.1+yzhp_grade.期中*0.2+yzhp_grade.期末*0.7) row_num
    from yzhp_grade,yzhp_course,yzhp_student
    where yzhp_grade.课程代号=yzhp_course.课程代号
    and yzhp_grade.学号=yzhp_student.学号
    group by yzhp_course.课程名 
    )T
    where row_num = 1
      

  4.   


    select 姓名,yzhp_course.课程名,
    max(yzhp_grade.平时*0.1+yzhp_grade.期中*0.2+yzhp_grade.期末*0.7) as 最高总评
    from yzhp_grade,yzhp_course,yzhp_student
    where yzhp_grade.课程代号=yzhp_course.课程代号
    and yzhp_grade.学号=yzhp_student.学号
    and 课程名 like '%'
    group by 姓名,yzhp_course.课程名
    现在写成这样了,但是仍然得不到我要的结果,max在这没有什么作用,输出仍然是所有行。
      

  5.   

    这样
    select 姓名,yzhp_course.课程名,max(最高总评) 最高总评 
    from 
    (
    select 姓名,yzhp_course.课程名,
    max(yzhp_grade.平时*0.1+yzhp_grade.期中*0.2+yzhp_grade.期末*0.7) as 最高总评
    from yzhp_grade,yzhp_course,yzhp_student
    where yzhp_grade.课程代号=yzhp_course.课程代号
    and yzhp_grade.学号=yzhp_student.学号
    and 课程名 like '%')
    T
    group by 姓名,yzhp_course.课程名 
      

  6.   

    里面那个max忘记去掉了,,,,,,,,,,,,
      

  7.   

    消息 4104,级别 16,状态 1,第 1 行
    无法绑定由多个部分组成的标识符 "yzhp_course.课程名"。
    消息 4104,级别 16,状态 1,第 1 行
    无法绑定由多个部分组成的标识符 "yzhp_course.课程名"。
    还是出现错误