多字段报告,在MySql中具有自定义计数

时间:2010-10-06 10:58:12

标签: mysql sql

我正在使用我没有创建的系统。该系统有3个主要表:

用户,课程和用户组。我正在使用一个名为coursehits的额外表。

这是一个MySQL DB,5.0。数据库中没有任何关系,因此只需在课程和用户表中向用户组(course_id和user_id)添加条目,即可将用户分配到课程。同样,如果他们开始课程,则可以参加课程。

我正在尝试计算用于报告数据的课程和用户组中的用户数量。到目前为止,我有以下在一个查询中没有正确计数,但这不正确,结果太高了:

SELECT DISTINCT
c.course_name,
COUNT(ug.user_id) AS "Enrolled",
COUNT(ch.user_id) as "Started"

FROM courses c, usergroups ug, coursehits ch, users u

WHERE ch.user_id = u.id
AND ug.user_id = u.id
AND ug.course_id = c.id
AND ch.page_id != 4
GROUP BY 1

在我单独做以下工作之前,确实有效:

SELECT DISTINCT c.course_name, COUNT(ug.user_id) AS "Enrolled"
FROM courses c, usergroups ug
WHERE ug.course_id = c.id
GROUP BY 1

现在我想在一个查询中报告每个课程的用户状态,我希望这有意义吗?!

1 个答案:

答案 0 :(得分:1)

尝试:

SELECT c.course_name,
       COUNT(DISTINCT ug.user_id) AS "Enrolled",
       COUNT(DISTINCT ch.user_id) as "Started"
FROM courses c
left join usergroups ug on ug.course_id = c.id
left join coursehits ch on ch.course_id = c.id and ch.page_id != 4
GROUP BY c.course_name