【问题标题】:How to Fetch Monthly Attendance report by student?如何获取学生的月度出勤报告?
【发布时间】:2016-04-01 08:39:53
【问题描述】:

我通过表单帖子获得了 student_id=14,我需要获取 student_id 的出勤报告,如下所示

CLASS   STUDENT_ID  YEAR    MONTH   TOTAL_CLASSES   TOTAL_PRESENT

11      14      2016       April          21             20
11      14      2016       May            25             25
11      14      2016       June           30             29
11      14      2016       July           18             18
11      14      2017       January        28             28

这里 TOTAL_CLASSES 代表学校开学的总天数,TOTAL_PRESENT 代表 TOTAL_CLASSES 个学生在场的总天数。

从 HTML 表单中,我只得到了 student_id=14,我需要像上面一样获取并显示记录。

请在此处查看 sqlfiddle 以支持我的回答 http://sqlfiddle.com/#!9/63b6a/3

在我的表中,备注代表 1,2,3 代表出席,0 代表缺席。

【问题讨论】:

  • 你需要一个日历表,本质上是一个有 12 个整数的表,在上面左连接以获得所有月份
  • 请 sqlfiddle 只有该表可用于出勤并知道学校开放多少天我需要找到学生的 class_id 然后计算特定班级月份的总 att_date 以获取TOTAL_CLASSES

标签: mysql


【解决方案1】:

您正在计算每个 yearmonthclassstudent 的出席人数。此查询的关键步骤是使用GROUP BY 指示您要分组的列,然后使用 COUNT 和 SUM 聚合函数来计算您要查找的出勤列:

SELECT 
  class_id, 
  student_id, 
  YEAR(att_date) as year, 
  MONTH(att_date) as month, 
  COUNT(remarks) AS total_classes,
  SUM(remarks > 0) AS total_present
FROM attendance
WHERE student_id = 15
GROUP BY YEAR(att_date), MONTH(att_date), class_id, student_id;

http://sqlfiddle.com/#!9/63b6a/11

您可以删除 WHERE 子句以显示所有学生的出勤率。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2019-04-25
    • 2019-01-04
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多