【问题标题】:SQL (MySQL) Count average attributable to a one person for each classSQL (MySQL) 每个班级一个人的平均计数
【发布时间】:2016-07-02 11:36:01
【问题描述】:

你好。我会就我的问题寻求帮助。我有这样的建模情况:我有两个表:

学生

ID, FIRST_NAME, LAST_NAME,DATE_OF_BIRTH, CLASS,
1, Petr, Fish, 4.3.1984, 4A
2, John, Stone, 5.5.1990, 4A
3, Jack, Clark, 6.3.1983, 4A
4, George, Field, 5.8.1955, 4A
5, John, Rock, 6.1.1999, 4B
6, Patrick, Light, 1.11.1983, 4B

POINTS_MATH:

STUDENT_ID, POINTS
1, 15
1, 20
2, 30
3, 11
3, 5
4, 3

而且我需要计算每个班级一名学生的平均分(也有空值),所以结果可能如下所示:

CLASS, AVERAGE_POINTS
4A, 21
4B, 0

非常感谢您的每一个回答

【问题讨论】:

  • 你能解释一下结果是如何计算的吗?

标签: mysql sql count average


【解决方案1】:

根据您的示例,您不需要平均分数,而是所有分数的总和除以学生人数:

 SELECT a.CLASS,
   COALESCE(SUM(p.POINTS) / COUNT(DISTINCT p.STUDENT_ID), 0)
FROM STUDENTS AS s
LEFT JOIN POINTS_MATH AS p ON s.ID = p.STUDENT_ID
GROUP BY c.CLASS

您还可以检查每个学生的平均值是否更适合您的需要:

SELECT s.CLASS, COALESCE(AVG(avgPoints), 0)
FROM STUDENTS AS s
LEFT JOIN 
 (
   SELECT STUDENT_ID, AVG(POINTS) AS avgPoints
   FROM POINTS_MATH
   GROUP BY STUDENT_ID
 ) AS p
ON s.ID = p.STUDENT_ID
GROUP BY s.CLASS

【讨论】:

  • 这正是我正在寻找的,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多