Ok. So part way there! I've got the extract from the course grading scheme working.
But would appreciate any advice on getting this to work with assignment submissions!
With the course grading scheme I'm not entirely sure if points are ever used! And i and I cant seem to create any gs.version = 1 schemes from within the gui - everything is version 2. So this works, so far...
...
,(
SELECT grade->>0
FROM jsonb_array_elements(CAST(gs.data AS jsonb)) AS grade
WHERE
CASE
WHEN sc.override_score IS NOT null THEN sc.override_score/100
WHEN c.group_weighting_scheme IN ('percent', 'equal') THEN sc.current_score/100
WHEN c.group_weighting_scheme IS null THEN sc.current_points
ELSE NULL
END >= (grade->1)::numeric
ORDER BY (grade->1)::numeric DESC
LIMIT 1
) AS final_grade
FROM
canvas.scores sc
JOIN
canvas.enrollments e ON e.id = sc.enrollment_id
JOIN canvas.courses c ON e.course_id = c.id
JOIN canvas.users u ON u.id = e.user_id
JOIN canvas.pseudonyms p on p.id = u.id
JOIN canvas.grading_standards gs ON gs.id = c.id
WHERE ...
AND sc.course_score IS true
But I get an Operator does not exist: character varying ->> integer when I try and apply this to assignments with a grading_type = letter grades.
select a.id
, a.workflow_state
, a.points_possible
, a.grading_type
, a.description
, a.position
, a.title
, s.score
, s.score/a.points_possible AS score_decimal
, gs.data
,(
SELECT grade ->>0
FROM jsonb_array_elements(CAST(gs.data AS jsonb)) AS grade
WHERE
(s.score/a.points_possible) >= (grade->1)::numeric
ORDER BY (grade->1)::numeric DESC
LIMIT 1
) AS final_grade
from canvas.submissions s
join canvas.assignments a on a.id = s.assignment_id
left join canvas.grading_standards gs on a.grading_standard_id = gs."id"
where grading_type = 'letter_grade'
Any assistance appreciated.