Honor Roll Lists / GPA Lists?

Is it possible to create a report which informs the highest averages by grade level? In order to create the honor roll list? For academic awards?

Thank you!

Hi @brendenpicard

Yes, but it depends where you are storing your grades. The markbook is designed to be a live document that teachers can add and update their grades in throughout the school year, so while it does have averages calculated, these are live calculated so they are always up to date. The reports module, on the other hand, is intended for official reporting, where grades are finalized and locked in place, so they can be added to reports and transcripts. For this reason, report grades are the best place to base your averages and GPA calculations on.

I recommend using the Query Builder module to setup your queries. Here is an example of a query for report grades of a specific range (eg: honours)

SELECT gibbonReportingCycle.nameShort as `Report Term`, 
    gibbonPerson.surname as `Surname`, 
    gibbonPerson.firstName as `First Name`, 
    gibbonPerson.preferredName as `Preferred Name`, 
    gibbonYearGroup.nameShort as `Year Group`, 
    gibbonFormGroup.nameShort as `Form Group`, 
    CONCAT(gibbonCourse.nameShort, ".", gibbonCourseClass.nameShort) as `Course Class`,
    CONCAT(teacher.preferredName, ' ', teacher.surname) AS `Course Teacher`, 
    gibbonReportingValue.value as `Grade`
FROM gibbonReportingValue 
    JOIN gibbonReportingCriteria ON (gibbonReportingValue.gibbonReportingCriteriaID=gibbonReportingCriteria.gibbonReportingCriteriaID) 
    JOIN gibbonCourseClass ON (gibbonReportingValue.gibbonCourseClassID=gibbonCourseClass.gibbonCourseClassID) 
    JOIN gibbonCourse ON (gibbonCourse.gibbonCourseID=gibbonCourseClass.gibbonCourseID) 
    JOIN gibbonCourseClassPerson ON (gibbonCourseClass.gibbonCourseClassID=gibbonCourseClassPerson.gibbonCourseClassID AND gibbonCourseClassPerson.role = 'Teacher') 
    JOIN gibbonPerson AS teacher ON (gibbonCourseClassPerson.gibbonPersonID=teacher.gibbonPersonID) 
    JOIN gibbonReportingCycle ON (gibbonReportingCycle.gibbonReportingCycleID=gibbonReportingValue.gibbonReportingCycleID) 
    JOIN gibbonStudentEnrolment ON (gibbonStudentEnrolment.gibbonPersonID=gibbonReportingValue.gibbonPersonIDStudent) 
    JOIN gibbonFormGroup ON (gibbonFormGroup.gibbonFormGroupID=gibbonStudentEnrolment.gibbonFormGroupID) 
    JOIN gibbonYearGroup ON (gibbonYearGroup.gibbonYearGroupID=gibbonStudentEnrolment.gibbonYearGroupID) 
    JOIN gibbonPerson ON (gibbonPerson.gibbonPersonID=gibbonReportingValue.gibbonPersonIDStudent) 
WHERE gibbonStudentEnrolment.gibbonSchoolYearID=gibbonReportingCycle.gibbonSchoolYearID 
AND gibbonReportingCycle.gibbonReportingCycleID = :gibbonReportingCycleID 
AND ( gibbonReportingCriteria.name = 'Term Grade')
GROUP BY gibbonPerson.gibbonPersonID, gibbonCourseClass.gibbonCourseClassID 
HAVING (`Grade` >= 80.0) 
ORDER BY gibbonYearGroup.nameShort, gibbonFormGroup.nameShort, gibbonPerson.surname, gibbonPerson.firstName, gibbonReportingCriteria.sequenceNumber;

(Using :gibbonReportingCycleID as a variable in Query Builder, or replacing it with an ID value. This is setup for a school that uses percent grade scales with a criteria called “Term Grade”, it would need modified for your own criteria.)

1 Like

Thank you, Sandra! This helped!

1 Like