【问题标题】:Selecting Max Count选择最大计数
【发布时间】:2018-02-07 18:19:09
【问题描述】:

我希望返回成绩最高的个人的姓名。我在想max(count(*)) 之类的东西,但我不能完全破解它。

这是数据集

+ -------- Student -------- +  + -------- Grades --------- + 
+ Student_ID INT            +  + Student_ID INT            +
+ Student_Name VARCHAR(10)  +  + Assignment_ID INT         +
+                           +  + Grade INT                 +
+ ------------------------- +  + ------------------------- +
  INSERTS                        INSERTS
  (Student_ID, Student_Name)     (Student_ID, Assignment_ID, Grade)
  (1,'Alex')                     (1,10,90) (2,10,85)         
  (2, 'Brett1')                  (3,10,75) (4,10,74)
  (3,'Cora')                     (1,11,80) (2,11,81)
  (4,'David')                    (4,11,88) (6,11,86)
  (5,'Eleanor')                  (2,12,84)
  (6,'Brett2')

以及我对解决方案的尝试:

SELECT s.Student_Name FROM Student s
WHERE(
  SELECT * FROM Grades g
  WHERE g.Student_ID=s.Student_ID
    and g.Assignment_ID=MAX(COUNT(g.Assignment_ID))
  )

【问题讨论】:

  • 您是否正在尝试检索每个学生的最高 assignment_ID 以及相关的成绩?你能改述一下你的要求吗? (究竟什么是赋值?)
  • 不,只有作业 ID 总和最高的学生的姓名。

标签: sql sql-server count max


【解决方案1】:

此查询可能会有所帮助:

select top 1 s.Student_ID,s.Student_Name,COUNT(g.Assignment_ID) as TotalAssignments
from Student s
inner join Grades g on s.Student_ID = g.Student_ID
group by s.Student_ID,s.Student_Name
order by COUNT(g.Assignment_ID) desc

【讨论】:

  • 我只是想返回完成作业次数最多的学生的姓名,而不是 GradeTotal。因此,虽然这正确返回了 Brett1,因为他的 SUM 最高,但有没有办法返回 Brett1,因为他的 count(assignment_id) 是最高的?
  • 是的,只需使用 count(g.assignment_id) 而不是 sum。编辑了我的答案。 @matrixfox
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
  • 2022-08-10
  • 2022-10-13
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
相关资源
最近更新 更多