考慮以下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'語句? –