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