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

多字段报告,在MySql中具有自定义计数,mysql,sql,Mysql,Sql,我正在使用一个我没有创建的系统。该系统有3个主表: 用户、课程和用户组。我用的是一张叫coursehits的额外桌子 这是一个MySQL数据库,5.0。数据库中没有任何关系,因此用户只需从courses and users表中向用户组(course_id和user_id)添加一个条目,即可分配到课程。同样,如果他们开始一门课程,也会在课程中输入内容 我试图统计coursehits和报告数据的用户组中的用户数。到目前为止,我有以下几项在一次查询中计算不正确,但这项计算不正确,结果太高: SELEC

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

用户、课程和用户组。我用的是一张叫coursehits的额外桌子

这是一个MySQL数据库,5.0。数据库中没有任何关系,因此用户只需从courses and users表中向用户组(course_id和user_id)添加一个条目,即可分配到课程。同样,如果他们开始一门课程,也会在课程中输入内容

我试图统计coursehits和报告数据的用户组中的用户数。到目前为止,我有以下几项在一次查询中计算不正确,但这项计算不正确,结果太高:

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
现在我试图在一个查询中报告每个课程的用户状态,我希望这是有意义的

试试看:

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
尝试:


为什么必须是一个查询,有什么特殊的目的吗?在SQL中,最好让两个查询分别执行不同的操作,而不是尝试以某种奇怪的方式将其组合起来。为开发人员执行此操作时,我将两个查询分别执行,它们工作正常,现在执行第三个查询。我认为这只是一种方便,同时也扩大了我的SQL边界。为什么它必须是一个查询呢?在SQL中,最好让两个查询分别执行不同的操作,而不是尝试以某种奇怪的方式将其组合起来。为开发人员执行此操作时,我将两个查询分别执行,它们工作正常,现在执行第三个查询。我想这只是为了方便,同时也突破了我的SQL界限。谢谢你,我希望我能给你一个分数,但我还不够酷:(谢谢again@teatime,如果您很高兴答案解决了您的问题,您应该能够接受它(通过单击答案左侧的勾号)谢谢你,我希望我能给你一个分数,但我还不够冷静again@teatime,如果您很高兴答案解决了您的问题,您应该能够接受它(通过单击答案左侧的勾号)。