Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

MDL-30734 question engine: sum_usage_marks_subquery edge-case.

When all qas in a useage are 'gaveup' state, it gives NULL, not 0.0, for the total.
  • Loading branch information...
commit 9831354928bed241fed4251a93a136040f5db587 1 parent acb3bf8
@timhunt timhunt authored
Showing with 5 additions and 1 deletion.
  1. +5 −1 question/engine/datalib.php
View
6 question/engine/datalib.php
@@ -851,7 +851,11 @@ public function set_max_mark_in_attempts(qubaid_condition $qubaids, $slot, $newm
* @return string SQL code for the subquery.
*/
public function sum_usage_marks_subquery($qubaid) {
- return "SELECT SUM(qa.maxmark * qas.fraction)
+ // To explain the COALESCE in the following SQL: SUM(lots of NULLs) gives
+ // NULL, while SUM(one 0.0 and lots of NULLS) gives 0.0. We don't want that.
+ // We always want to return a number, so the COALESCE is there to turn the
+ // NULL total into a 0.
+ return "SELECT COALESCE(SUM(qa.maxmark * qas.fraction), 0)
FROM {question_attempts} qa
JOIN {question_attempt_steps} qas ON qas.id = (
SELECT MAX(summarks_qas.id)
Please sign in to comment.
Something went wrong with that request. Please try again.