MySQL SUM()与COUNT()在多列上
我是MySQL的新手,仍在努力学习诀窍。如果这太简单,请原谅我 我有三张桌子: 学生:MySQL SUM()与COUNT()在多列上,mysql,join,sum,aggregate-functions,Mysql,Join,Sum,Aggregate Functions,我是MySQL的新手,仍在努力学习诀窍。如果这太简单,请原谅我 我有三张桌子: 学生: 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 我试图计算每个家长在学校的学生人数和每个学生的班级数量 到目前为止,我设法修改了查询
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()
函数,但我不确定应该在什么上使用它。我应该在计数()的值上使用它吗
再次感谢大家,你们帮了大忙。(我也会继续努力)。为了重新表述你想要找到的内容,似乎对于每位家长来说,你都想知道他在学校里有多少学生,以及这些学生总共上了多少课。我建议使用连接语法来连接所需的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'
根据您的上述评论,我认为这应该能告诉您您的目标(每位家长注册的儿童/班级总数):
假设一位家长在学校里有三个孩子;你的结果集中的记录会是什么样子?对于一个有三个孩子的家长来说,我得到的答案是:家长姓名|学生人数约翰·洛特先生| 4这就是你的意思吗?我的意思是,如果你想一想你问的问题,对于一个在学校有三个孩子的家长来说,真的不清楚如何将数据合并在一起。您想要的结果要么只显示每位家长一次,在这种情况下,学生姓名和班级数量应该显示什么?否则,同一位家长会出现三次,每个孩子一次。您需要更清楚地了解您希望结果的外观。我希望结果显示家长姓名和应付金额。不是一定要看每个家长有多少孩子,或者每个学生上多少课,这只是帮助我看看计算是否正确correct@user1361276你有什么错误?这种连接背后的思想是,从家长到学生的连接可以是一对多,从学生到班级的连接可以是一对多。因此,按父级分组并计算结果联接中的总行数应该可以告诉您正在使用多少类。@user1361276:它做了您想要的吗?仅供参考,如果他们为你工作,你应该这样做(这就是为什么我们这么做!)。更好的是,如果答案对你有帮助,你也可以考虑。
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;