簡體   English   中英

如何將兩列中的不同值計數為一個數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM