【问题标题】:JOIN with multiple COUNT columns加入多个 COUNT 列
【发布时间】:2014-03-20 17:48:04
【问题描述】:
course_modules
id course
1   3
2   3
3   6
4   8
5   8
23  9
46  9

user_completed_modules
id  coursemoduleid userid 
1        1           6
2        2           6
3        3           6
4        4           12
5        5           12
6        23          12
7      46          12

I need the output like

userid  course count(coursemoduleid) count(coursemodules)
 6       3               12               10
 6       8               8                10
 6       9               6                15

这里我需要users completed modulescount of modules in a course 我对我的英语感到非常抱歉。

谁能帮我查询一下?

SELECT count(cm.id) AS "coursemodules",
(SELECT count(cmc.coursemoduleid) FROM user_completed_modules cmc 
JOIN course_modules cm ON cmc.coursemoduleid = cm.id 
WHERE cmc.userid = 6 AND cm.course = 8 ) AS "completedmodules"
ROM course_modules cm WHERE cm.course= 8

【问题讨论】:

  • 这取决于实现。如果没有有用的 PARTITION BY 函数,请考虑 SELECT .. FROM baseRelation LEFT JOIN derivedCount1 LEFT JOIN derviedCount2(我还建议避免使用 [implicit] CROSS JOIN 语法。)
  • 您使用的是什么数据库?根据什么逻辑你的计数是有意义的?
  • 我需要向用户显示课程中已完成的模块以及课程中的模块总数

标签: sql join count


【解决方案1】:

试试:

SELECT userid, cm.course, count(*), m.ct
     FROM user_completed_modules c JOIN
          course_modules cm ON cm.id = c.coursemoduleid JOIN
          (
            SELECT course, count(*) AS ct
               FROM course_modules GROUP BY course
          ) AS m ON cm.course = m.course
     GROUP BY userid, course, m.ct

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 2018-09-04
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多