[英]How to count distinct values from two columns into one number
我正在處理的兩個表是這些:
提交:
+----+------------+
| id | student_id |
+----+------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+----+------------+
Group_submissions:
+----+---------------+------------+
| id | submission_id | student_id |
+----+---------------+------------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
+----+---------------+------------+
只有一名學生實際提交並進入提交表,而其他學生則進入 group_submissions 表(如果提交是小組提交)
我想計算作為一組或單獨提交的學生的唯一數量
我希望最后只返回數字(3 基於上表中的數據)
如果他在 group_submission 表中,則在提交表中的學生不應被計算兩次,反之亦然。
此外,只進行過個人提交(不在 group_submissions 表中)的學生也應該被計算在內,無論他們是否曾經參加過小組提交
我已經在我正在構建的查詢中對這些表進行了一些其他操作,所以如果您能提供基於連接這兩個表的解決方案會有所幫助。
這是我嘗試過的:
count(distinct case when group_submissions.student_id is not null then group_submissions.student_id end) + count(distinct case when submissions.student_id is not null then submissions.student_id end)
但它給了我重復,所以如果一個學生在兩個表中,他會被計算兩次。
有任何想法嗎?
注意:這是一個 MySQL 數據庫。
我想你想要union
和計數:
select count(*)
from ((select student_id
from submissions
)
union -- on purpose to remove duplicates
(select student_id
from group_submissions
)
) s;
聽完澄清后,我認為強迫自己使用join來計算是不明智的。 您可以改為將計數作為最終結果的簡單表達式。 使用 UNION 和 distinct 將有助於構建這樣的表達式。
下面的舊答案不適合問題:
您當前的版本需要非常簡單的修復...
count(distinct case when group_submissions.student_id is not null then group_submissions.student_id when assignment_submissions.student_id is not null then assignment_submissions.student_id end)
筆記:
- 您的原始表達式是 2 個 case 表達式之間的相加,每個表達式內部都有一個 WHEN
- 現在我用 2 WHEN's``SQL 把它變成了一個單一的 case 表達式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.