Skip to content

exam_results

Exam attempts by learners.

  • ETL strategy: merge
  • PK: id

Columns

ColumnTypeDescription
idBIGINTPK.
id_tenantBIGINTFK → tenants.id.
id_productBIGINTFK → products.id.
id_examBIGINTFK → exams.id.
id_userBIGINTFK → users.id.
id_lessonBIGINTFK → lessons.id. Lesson that hosted the exam.
is_discardedBOOLEANAttempt discarded.
is_finishedBOOLEANAttempt finished.
is_timeoutBOOLEANAttempt closed due to timeout.
min_scoreFLOATPassing score.
resultFLOATScore achieved.
correct_answersINTEGERNumber of correct answers.
wrong_answersINTEGERNumber of wrong answers.
answersJSONBFull answers payload.
created_atTIMESTAMPTZ
deleted_atTIMESTAMPTZ

Patterns

sql
-- Pass vs. fail in the last 30 days
SELECT
    CASE WHEN result >= min_score THEN 'pass' ELSE 'fail' END AS status,
    count(*)
FROM lms.exam_results
WHERE is_finished = TRUE
  AND is_discarded = FALSE
  AND deleted_at IS NULL
  AND created_at >= now() - interval '30 days'
GROUP BY 1;

For executive view, use metrics.daily_counters — columns exams_passed and exams_failed.

OpenDB · Cademi LMS Data Warehouse