繁体   English   中英

使用CASE WHEN捕获另一列中的不同记录数

[英]Using CASE WHEN to grab distinct count of records in another column

我在这里很认真,但是我找不到我的问题的答案。 我的桌子有三列有趣的东西。 已注册的学生(student_name),课程(class_name)以及他们是否已完成(状态)该课程。 我希望能够最终计算出每堂课通过多少学生的比率。

所以我尝试了这个:

SELECT 
  class_name as Class,

  COUNT_DISTINCT(student_name) as Total_Students,

  COUNT(CASE WHEN status = "COMPLETED" 
    THEN 1, ELSE 0 END) as Total_Completes,

  Total_Completes / Total_Students as Completion_Rate

 ....

GROUP BY Class

但这给我夸张的#s,因为一个学生可以为一个班级生成很多COMPLETED记录。 我需要的是完成课程的不同学生人数。 我尝试更改措辞,以使嵌套在CASE时具有COMPLETED状态的Student_name的不同记录记录在案,但我找不到正确的语法(如果存在)。

谢谢你的帮助!

因此,您应该能够使用内联视图解决您的问题。

SELECT
   class_name as Class,
   COUNT_DISTINCT(student_name) as Total_Students,
   SUM(CASE WHEN status = "COMPLETED" THEN 1, ELSE 0 END) as Total_Completes,
   Total_Completes / Total_Students as Completion_Rate
FROM
    (SELECT DISTINCT 
         class_name ,
         student_name,
         status 
    FROM 
         ClassTable) as t
GROUP BY 
     class

此内联视图创建一组独特的班级,学生和状态。 但是,由于同一位学生仍然有潜力“ COMPLETE”而不是“ COMPLETE”,因此您仍必须在学生姓名上使用COUNT_DISTINCT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM