考虑以下mdl_course_completions
表描述了用户结业:如何在额外列中的一个sql查询中结合2个组的查询结果?
id,bigint
userid,bigint
course,bigint
timeenrolled,bigint
timestarted,bigint
timecompleted,bigint
reaggregate,bigint
要确定的,如果一门课程已经由学生完成,我用的timecompleted
领域的谓语。
当此字段为空时,学生尚未完成课程,但是当此字段不为空时,表示学生已完成课程。
因此,成品按课程课程的学生人数的计数为:
SELECT mdl_course.fullname,count(*) as "number of students that didn't finish courses"
FROM mdl_course_completions
INNER JOIN mdl_course on mdl_course.id = mdl_course_completions.course
WHERE timecompleted IS NOT NULL
GROUP BY mdl_course.fullname
;
结果是:
| course name | number of students that finish courses |
|-------------|----------------------------------------|
| course 1 | 50 |
| course 2 | 200 |
| course 3 | 120 |
和学生人数的计数没'T完成当然课程是由:
SELECT mdl_course.fullname,count(*) as "number student that didn't finish courses"
FROM mdl_course_completions
INNER JOIN mdl_course on mdl_course.id = mdl_course_completions.course
WHERE timecompleted IS NULL
GROUP BY mdl_course.fullname
;
结果是:
| course name | number of students that didn't finish courses |
|-------------|-----------------------------------------------|
| course 1 | 12 |
| course 2 | 12 |
| course 3 | 120 |
我不知道如何可以结合这2个查询在一个查询得到的结果在一个额外的列如:
| course name | number of students that finish courses | number of students that didn't finish courses |
|-------------|------------------------------------|-------------------------------------------|
| course 1 | 50 | 12 |
| course 2 | 200 | 12 |
| course 3 | 120 | 120 |
我使用postgresql.In我看来,这种东西与数据库系统无关。我只是不知道如何继续将这两个查询合并成一个额外的列与GROUP BY子句。
这是工作的罚款:谢谢。我没有意识到“条件聚合”概念的存在。有关如何添加第三列的任何想法,总结两个完成课程并没有完成课程的学生? –
将'count(*)'添加到查询中,这会给你总数。 –
好吧,这就是诀窍,也许这对于第2个其他人计算学生列时也会更好地使用'count'语句? –