【问题标题】:How can I show the maximum score of each department with their names如何用他们的名字显示每个部门的最高分
【发布时间】:2019-07-23 07:12:11
【问题描述】:

我可以选择每个部门的最高分数,但我无法显示与最高分数相关的每个人的姓名。 我试着选择了名字和最高等级(带最高功能)但是不起作用:

select max(stgrade)as highscore,StName,DepName --department
from TBL_DEPARTMANTS d
inner join TBL_LESSONS l on d.DepID=l.LessonID
inner join TBL_GRADES g on g.lessonid=l.LessonID
inner join TBL_STUDENT s on s.STID=g.stid
group by DepName,StName
order by DepName,highscore desc

【问题讨论】:

  • 你能提供每个表格的一些样本日期吗? TBL_DEPARTMENTS 和 TBL_LESSONS 之间的连接是否正确?
  • 对于每个department,您要显示哪个name?这是一个有效的查询吗?

标签: sql sql-server group-by aggregate-functions


【解决方案1】:

你可以试试这个……

select * from ( select rank() over (partition by DepName order by stgrade desc) as Slno, stgrade, stname, DepName 
from TBL_DEPARTMANTS d
inner join TBL_LESSONS l on d.DepID=l.LessonID
inner join TBL_GRADES g on g.lessonid=l.LessonID
inner join TBL_STUDENT s on s.STID=g.stid  ) as dep where dep.slno=1

首先为各个部门创建rank(),以降序排列。然后选择相同的最高记录。

注意:使用RANK()DENSE_RANK(),两者都适用于top 1 记录,而如果您想选择n 最高等级则使用DENSE_RANK(),最后为slno 通过@987654328 @要选择的记录。

【讨论】:

  • 我只是登录并无法标记它==>感谢您的反馈!声望低于 15 人的投票会被记录,但不会更改公开显示的帖子分数
  • @fast:对于@philippe 提到的情况,您可以使用rank() 而不是row_number()。更新了我的答案,请检查。
【解决方案2】:

总是很难进行理论选择,但虽然 DarkRob 的解决方案很好,但如果两个人是最好的,它会删除学生。这就是我喜欢使用交叉应用的原因:

select
      d.Depname
    , s.StName
    , g.stgrade
from TBL_DEPARTMANTS d
inner join TBL_LESSONS l on
    d.DepID=l.LessonID
inner join TBL_GRADES g on
    g.lessonid=l.LessonID
inner join TBL_STUDENT s on
    s.STID=g.stid
cross apply (
    select
          sub_d.DepID
        , max(sub_g.stgrade) as maxgrade
    from TBL_DEPARTMANTS sub_d
    inner join TBL_LESSONS sub_l on
        sub_d.DepID=sub_l.LessonID
    inner join TBL_GRADES sub_g on
        sub_g.lessonid=sub_l.LessonID
    where sub_d.Dep_ID = d.Dep_ID
    group by sub_d.DepID
) as sub 
where g.stgrade = sub.maxgrade

这样,您将获得每个部门最高成绩的所有人,而不仅仅是一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多