我是一个认真的菜鸟,但我还没能找到问题的答案。我的表有三列感兴趣。他们已注册的学生(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记录。我需要的是完成课程的不同学生的数量。我尝试更改措辞,以便计算嵌套在具有COMPLETED状态的CASE WHEN中的student_names的不同记录,但我无法找出正确的语法(如果存在)。
感谢您的帮助!
答案 0 :(得分:2)
因此,您应该可以使用内联视图解决问题。
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
此内联视图会创建一组独特的班级,学生和状态。但是,由于您仍然有可能为同一个学生“完成”而不是“完成”,您仍然需要在学生姓名上使用COUNT_DISTINCT