MySQL SUM()与多列上的COUNT()

时间:2012-05-01 11:10:13

标签: mysql join sum aggregate-functions

我对MySQL很陌生,仍在尝试学习绳索。如果这太基本了,请原谅我

我有3张桌子:

学生:

Student id|Student name| Gender|Parent id

父:

Parent id|Parent name|Parent Address|Parent Phone|

和类:

Class id|Class Name|Class day

和学生唱名致电:

Student id|Class Id

我正在尝试计算每个家长在学校的学生人数和每个学生的班级数。

到目前为止,我设法改变查询以计算父名称和他们需要支付的活动数量:

SELECT CONCAT_WS(' ',P.Parent_title,P.Parent_fname,P.Parent_sname) AS 'Parent name',
COUNT(RC.Student_id) AS 'Number of Activities'
FROM Student S,Parent P,RollCall RC,Class C
WHERE S.Parent_id=P.Parent_id AND S.Student_id=RC.Student_id AND RC.Class_id=C.Class_id
GROUP BY S.Parent_id;

但我不确定如何包含SUM()来计算每位家长需要支付的总金额,比如说每个班级是25美元。 我的教授暗示我需要使用CAST()函数,但我不确定我应该使用它。我应该在COUNT()

的值上使用它吗?

再次感谢大家,你们得到了巨大的帮助。 (我也会继续努力)。

2 个答案:

答案 0 :(得分:1)

除了上述评论之外,我认为这应该会为您提供您所追求的内容(每位父母的入学儿童/班级总数):

SELECT
  CONCAT_WS(' ', Parent_title, Parent_fname, Parent_sname) AS 'Parent name',
  COUNT(DISTINCT Student_id) AS 'Number of students',
  COUNT(DISTINCT Student_id, Class_id) AS 'Number of classes'
FROM
       Parent
  JOIN Student  USING (Parent_id)
  JOIN RollCall USING (Student_id)
  JOIN Class    USING (Class_id)
GROUP BY Parent_id;

答案 1 :(得分:0)

为了改写你想要找到的东西,似乎对于每个家长来说,你想知道他在学校里有多少学生,以及这些学生有多少班级。我建议使用JOIN语法来连接所需的3个表。

SELECT CONCAT_WS(' ',P.Parent_title,P.Parent_fname,P.Parent_sname) AS 'Parent name',
    count(distinct s.student_id) as num_students,
    count(*) as studentclasses 
FROM Parent p
    JOIN Student S
    ON S.parent_id = p.parent_id
        JOIN studentrollcall src
        on s.student_id = src.student_id
GROUP BY 'Parent name'