0

第 1 ピリオド後にサインアウトした学生の数を調べるクエリを作成する必要があります。学生が出席したかどうかの記録は保存されないため、学生が第 1 ピリオドに出席し、6 つの欠席記録があるかどうかはわかりません (7 ピリオドの日数があります)。私が持っているのは、以下のスキーマの情報だけです。私が書いたクエリがありますが、機能していません。ここからどこへ行くべきかについての助けが必要です。

ありがとう

ここに画像の説明を入力

    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
4

2 に答える 2

0

それで、最初の期間の後にサインアウトした学生を決定するためのあなたの基準は、Absent_Codeまたは'ABU'または'ABX'を持っていることですか?

その仮定が正しければ、次のようにクエリを実行して、その基準に一致する1日あたりの学生数を取得できます...

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

必要に応じて、WHERE句で特定の日付にさらにフィルタリングできます。

ちなみに、あなたのスキーマは私にはあまり意味がありません。したがって、上記がお探しのものでない場合は、スキーマについてもう少し説明していただければ、私がお手伝いできると確信しています。

于 2012-07-05T18:55:30.370 に答える
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;
于 2012-07-05T19:19:46.213 に答える