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