查询以查找退出的学生人数

时间:2012-07-05 18:44:38

标签: sql tsql

我需要写一个查询,以了解有多少学生在第一期后退出。如果学生在场,我们不会存储记录,所以我不能说学生是否在第一期并且有6个缺席记录(我们有7个周期天)。我所拥有的只是下面架构中的信息。我写了一个我写的查询,但它不起作用。需要一些帮助,从这里去。

由于

enter image description here

    Select student_id, Count(*) AS #ofPerAbsent

    From Attend_Student_Detail

    where School_Year='1112' and School_Number='0031'
    and Absent_Date='2012-04-13' and Absent_Code IN ('ABU','ABX')



    Group by Student_ID

    Having count(*)<=6

ORDER BY #ofPerAbsent desc

2 个答案:

答案 0 :(得分:0)

因此,您确定在第1期后退出学生的标准是Absent_Code或'ABU'还是'ABX'?

如果这个假设是正确的,那么您可以按如下方式查询,以获得符合该标准的每日学生人数......

SELECT COUNT(DISTINCT(Student_ID))
FROM Attend_Student_Detail
WHERE Absent_Code IN ('ABU','ABX')
GROUP BY Absent_Date

如果您愿意,可以在WHERE子句中进一步过滤到特定日期。

顺便提一下,你的架构对我来说没什么意义;所以,如果以上不是你想要的,你能不能再解释一下你的架构,我相信我可以提供帮助。

答案 1 :(得分:0)

从我可以收集到的内容中,您将需要计算所有缺席数量减去第一个时期之后的缺勤次数,所以我认为这样的事情应该有效。

SELECT 
  A.student_id, 
  (Count(A.student_id) - B.absences_after) as absences     
FROM 
  attend_student_detail as A
LEFT JOIN (
  SELECT 
    Z.student_id,
    Count(Z.student_id) as absences_after
  FROM
    attend_student_detail as Z
  WHERE school_year='1112' AND school_number='0031'
    AND absent_date='2012-04-13' AND absent_code IN ('ABU','ABX')
    AND absent_period <> "period one"
  GROUP BY Z.student_id
) as B
ON B.student_id = A.student_id
GROUP BY A.student_id;