Skip to content
SQL interview questions

EduPro

EdTech / online learning

EduPro sells self-paced online courses in data, programming, marketing, design and business. It tracks every step from sign-up to certificate: enrolments and what learners paid, each lesson they finish, assessment attempts, certificates and course reviews. Analysts use it to measure completion funnels, drop-off points, course revenue, instructor performance and learner retention, which are standard SQL interview topics at edtech companies.

See the EduPro tables

EduPro schema

All tables live in the edupro schema, so write edupro.students in your queries.

edupro.students

Registered learners.

  • student_id (INT) — PK
  • full_name (VARCHAR(80))
  • email (VARCHAR(120))
  • country (VARCHAR(40))
  • signup_date (DATE)
  • acquisition_channel (VARCHAR(20)) — 'organic', 'paid_search', 'referral', 'social'

edupro.instructors

Course instructors.

  • instructor_id (INT) — PK
  • full_name (VARCHAR(80))
  • expertise (VARCHAR(40))

edupro.courses

The course catalogue.

  • course_id (INT) — PK
  • title (VARCHAR(120))
  • category (VARCHAR(20)) — 'Data', 'Programming', 'Marketing', 'Design', 'Business'
  • difficulty (VARCHAR(12)) — 'beginner', 'intermediate', 'advanced'
  • instructor_id (INT) — FK → instructors.instructor_id
  • price (DECIMAL(8,2)) — list price in INR
  • created_at (DATE)
  • is_published (BOOLEAN)

edupro.lessons

Lessons in each course, in order.

  • lesson_id (INT) — PK
  • course_id (INT) — FK → courses.course_id
  • lesson_order (INT) — 1 = first lesson
  • title (VARCHAR(120))
  • duration_minutes (INT)

edupro.enrollments

One row per student per course.

  • enrollment_id (INT) — PK
  • student_id (INT) — FK → students.student_id
  • course_id (INT) — FK → courses.course_id
  • enrolled_at (DATE)
  • status (VARCHAR(10)) — 'ACTIVE', 'DROPPED', 'COMPLETED'
  • price_paid (DECIMAL(8,2)) — after coupons; can be below the list price
  • completed_at (DATE) — nullable; set when status is COMPLETED

edupro.lesson_progress

One row each time a student finishes a lesson.

  • progress_id (INT) — PK
  • enrollment_id (INT) — FK → enrollments.enrollment_id
  • lesson_id (INT) — FK → lessons.lesson_id
  • completed_at (TIMESTAMP)

edupro.assessments

Final assessment attempts.

  • assessment_id (INT) — PK
  • course_id (INT) — FK → courses.course_id
  • student_id (INT) — FK → students.student_id
  • attempt_number (INT)
  • score (INT)
  • max_score (INT)
  • submitted_at (TIMESTAMP)

edupro.certificates

Certificates issued on completion.

  • certificate_id (INT) — PK
  • student_id (INT) — FK → students.student_id
  • course_id (INT) — FK → courses.course_id
  • issued_at (DATE)

edupro.course_reviews

Star ratings left by learners.

  • review_id (INT) — PK
  • enrollment_id (INT) — FK → enrollments.enrollment_id
  • rating (INT) — 1 to 5
  • created_at (DATE)

Beginner (10)

  • BeginnerPublished courses per categoryOpen now
  • BeginnerBeginner courses under ₹1,000Open now
  • BeginnerLearners by country
  • BeginnerEnrolments in the last 30 days
  • BeginnerEnrolments by status
  • BeginnerAverage course price by difficulty
  • BeginnerCertificates issued this month
  • BeginnerReferral sign-ups in the last 90 days
  • BeginnerPerfect assessment scores
  • BeginnerCourses per instructor

Intermediate (11)

  • IntermediateCompletion rate by course
  • IntermediateRevenue and discounting by category
  • IntermediateAverage first-attempt score by course
  • IntermediateLearners enrolled in 3 or more courses
  • IntermediateCompletions with no certificate
  • IntermediateWhere do learners drop out?
  • IntermediateFirst-attempt pass rate by difficulty
  • IntermediateMonthly enrolments by acquisition channel
  • IntermediatePublished courses with no enrolments in 90 days
  • IntermediateHow long does completion take?
  • IntermediateCanonical learner email-domain counts

Advanced (22)

  • AdvancedLesson-by-lesson funnel for a course
  • AdvancedCourse revenue rank within category
  • AdvancedWhat do learners take next?
  • AdvancedSecond purchase within 60 days
  • AdvancedHow much do retakes improve scores?
  • AdvancedWeekly active learners
  • AdvancedActive learners who have stalled
  • AdvancedInstructor leaderboard
  • AdvancedHow concentrated is revenue?
  • AdvancedTime from enrolment to first lesson
  • AdvancedEnrolments with every course lesson completed
  • AdvancedProgress rows linked to the wrong course
  • AdvancedBest assessment attempt when maximum scores differ
  • AdvancedThirty-day completion by enrolment cohort
  • AdvancedAssessment score spread, not only the mean
  • AdvancedInspect the key needed for idempotent lesson completion
  • AdvancedA complete acquisition-channel by category matrix
  • AdvancedRemove duplicate completion rows while preserving earliest evidence
  • AdvancedCumulative curriculum duration with ordered ties
  • AdvancedChannel completion comparison with course-mix strata
  • AdvancedLesson-count versus duration-weighted completion
  • AdvancedDesign a completion table with a composite business key

Mock interview round (5)

  • AdvancedMock round 1: Monthly revenue and growth
  • AdvancedMock round 2: Learning funnel
  • AdvancedMock round 3: Which channels bring the best learners?
  • AdvancedMock round 4: Popular but poorly rated courses
  • AdvancedMock round 5: Who should get the next-course offer?

Choose optional cookies

We use necessary cookies for account security. With your permission, we also use analytics and advertising cookies on marketing pages. See our Privacy Policy.