首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL子查询

SQL子查询
EN

Stack Overflow用户
提问于 2014-03-14 14:10:13
回答 1查看 193关注 0票数 1

我需要在一个(用户)的(课程)中获得(已完成模块的计数)和(课程模块的计数)。

表:

代码语言:javascript
复制
course_modules - will have all the course modules
course_modules_completion - will have all the users with completed modules.

我希望在一个查询中显示所有这三个查询,如示例:

代码语言:javascript
复制
(course)  (count of course modules) (count of completed modules) (userid)
   3               20                        5                      12
   5               20                        8                      7

以下是我尝试的查询:

代码语言:javascript
复制
 SELECT
    c.fullname, count(cm.id) AS "coursemodules", cmc.userid,
    (SELECT count(cmc.coursemoduleid) 
     FROM mdl_course c 
         JOIN mdl_course_modules cm 
         JOIN mdl_modules m 
         JOIN mdl_course_modules_completion cmc ON c.id = cm.course 
           AND cm.module = m.id 
           AND cmc.coursemoduleid = cm.id 
           AND cmc.userid = 12 
           AND cm.course = 7 
           AND cmc.completionstate BETWEEN 1 AND 10) AS "completedmodules"
    FROM
    mdl_course c 
       JOIN mdl_course_modules cm 
       JOIN mdl_modules m 
          ON c.id = cm.course AND cm.module = m.id AND cm.course = 7

它显示一个错误:

代码语言:javascript
复制
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT count(cmc.coursemoduleid) FROM mdl_course c JOIN mdl_course_modules cm JO' at line 3

有人能推荐我吗?

代码语言:javascript
复制
Data for course_modules
id course moduletypeid
1    3     9 
2    3     9
3    3     17
4    5     20
5    5     18

Data for course_modules_completion
id  coursemoduleid userid
1      153           12
2      154           12
3      155           11
4      120           12
5      167            11
EN

回答 1

Stack Overflow用户

发布于 2014-03-14 14:17:03

应该是

代码语言:javascript
复制
FROM mdl_course c 
         JOIN mdl_course_modules cm ON c.id = cm.course
         JOIN mdl_modules m ON cm.module = m.id
         JOIN mdl_course_modules_completion cmc ON 
           cmc.coursemoduleid = cm.id 
WHERE
           AND cmc.userid = 12 
           AND cm.course = 7 
           AND cmc.completionstate BETWEEN 1 AND 10

更新

您可以尝试去掉SELECT中的子查询,并将其替换为

代码语言:javascript
复制
SUM(if (cmc.completionstate BETWEEN 1 AND 10,1,0) AS "completedmodules"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22397472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档