Итак, вот мой код:
SELECT s.student_id as 'Student_Number', CONCAT(IFNULL(s.student_fname,''),' ', IFNULL(s.student_mname,''),' ', IFNULL(s.student_lname,'')) 'Student_Name',s.student_program as 'Program', (SUM(IF(stat.status_description='Late',1,0))) 'Total_Lates', (SUM(IF(stat.status_description='Absent',1,0))) 'Total_Absences', Floor((SUM(IF(stat.status_description='Late',1,0))) / 3 + (SUM(IF(stat.status_description='Absent',1,0)))) 'Total_Absence_with_Lates' FROM attendance_tbl a LEFT JOIN student_tbl s ON s.student_id=a.entity_id LEFT JOIN status_tbl stat ON stat.status_id=a.status_id where a.course_id='$course' and a.entity_type='student' and CONCAT(IFNULL(s.student_fname,''),' ', IFNULL(s.student_mname,''),' ', IFNULL(s.student_lname,'')) like '%$stname%' GROUP BY a.entity_id, CONCAT(IFNULL(s.student_fname,''),' ', IFNULL(s.student_mname,''),' ', IFNULL(s.student_lname,'')) order by Student_Name ASC
Я считаю отсутствие для каждого ученика. 1 отсутствует = 1 отсутствует и 3 lates = 1 отсутствует.
Вот результат моего запроса:
Это таблицы, в которых я получаю данные FROM:
ATTENDANCE_TBL: его строки:
attendance_id | entity_id | course_id | rooms_id | status_id | date | time | term | entity_type
эта таблица в основном является посещаемостью студентов. status id - только целочисленный тип от 1-5 1 означает присутствующий, 2 - поздний, 3 -absent, 4- извините, 5-cut.
У меня также есть STATUS_TBL: его строки: status_id | status_description status id - от 1 до 5, тогда описание равно 1 означает присутствующий, 2 - поздний, 3 -absent, 4- извините, 5-cut.
Строки STUDENT_TBL:
student_id | studant_fname | studant_mname | studant_lname | student_program
student_program - это курс студента, например туризм, предпринимательство и т.д.
В целом, это проблема, с которой мне нужна помощь: я хочу игнорировать количество пропусков в дни праздников.
У меня есть holiday_table:
она имеет
announcement_id | announcement_date | announcement_description | term
если date_date совпадает с датой в attendance_tbl, а также в праздничном_таблице to attendance_tbl, в этот день будет игнорироваться подсчет посещаемости/отсутствующих/поздних. в основном это не будет считать
Когда вы делаете левое соединение таблицы посещаемости с праздничной_таблицей по объявлению и сроку, проверьте, является ли дата отпуска нулевым, тогда ваш исходный запрос не будет считать те даты, которые считаются праздниками. Вы не указали нам столбцы для attendance_tbl, чтобы вы могли выяснить этот запрос ниже.
select <...>
FROM attendance_tbl a
LEFT JOIN holiday_table h ON h.announcement_date = a.<date_column> and h.term = a.term
where h.announcement_date is null
and ...
Group By...
order by Student_Name ASC;