DEV Community

SQLMaxx
SQLMaxx

Posted on

We counted 13,000 SQL answers from 99 learners. The hardest lesson was SELECT.

Most SQL courses warn you about joins. In our data, joins were not the hard part. The first lesson was.

We make SQLMaxx Learn, a free SQL course with 66 lessons and 615 practice problems. You write each query, and PostgreSQL runs it in your browser.

From August 19 to October 25, 2026, 99 learners with accounts sent 13,105 graded answers. Here is what we found.

Also:
Our SQL course, SQLMaxx Learn, is completely free, and you do not need an account to start.

How we counted, and what we cannot see

  • For each answer, we record three things: the lesson, correct or wrong, and the time it took.
  • We do not see the SQL that you type. PostgreSQL runs it in your browser, and we never receive it.
  • We left out our own test accounts and all guest sessions.
  • We left out six problems that had a bug in our grader. Until October 8, 2026, we marked correct answers on those problems as wrong. With them in, the NULL lesson looks much harder than it is.
  • We show a lesson only when 15 or more learners answered problems in it.

SELECT was the hardest lesson in our SQL course

Lesson Answers that were correct Correct on the first try
1. SELECT 58% 70%
All lessons 80% 85%

"First try" is the first answer from each learner on each problem.

"First try" is the first answer from each learner on each problem.

The problems with the most wrong answers were not about SQL keywords. They were about arithmetic in a SELECT list:

  • A discount. Return the discount amount and the sale price for a $120 item at 25% off. 73 learners tried it, and 134 of 240 answers were wrong.
  • An invoice. Take a $400 rebate off a $3,600 invoice first. Then add a 5% fee to the rest. 60 learners tried it, and 123 of 210 answers were wrong.

The invoice problem needs parentheses:

SELECT (3600 - 400) * 1.05 AS net_payment;  -- 3360
SELECT 3600 - 400 * 1.05 AS net_payment;    -- 3180
Enter fullscreen mode Exit fullscreen mode

Without the parentheses, PostgreSQL multiplies first, and you get 3180 instead of 3360.

We cannot see your SQL, so we do not know the exact mistakes. Our best guess: the hard part is to turn a business sentence into an expression. You need that step before any SQL keyword matters.

Joins were not the problem

Lesson Correct on the first try
17. INNER JOIN 87%
18. LEFT JOIN 88%
21. Self join 88%
22. Joins across several tables 90%

Only 26 of the 99 learners got to the INNER JOIN lesson. Those learners had 16 lessons of practice already. So read these numbers this way: after that practice, most learners got joins right on the first try. They are not proof that joins are easy on day one.

Where learners stopped

Lesson Learners who answered at least one problem
1. SELECT 99
2. FROM 71
5. NULL 52
10. DISTINCT 31
17. INNER JOIN 26
27. Conditional aggregation 15

The largest drop is between lesson 1 and lesson 2: 28 of 99 learners did not continue. Lesson 1 is also the lesson with the lowest accuracy. We do not know if one causes the other, but we now look at lesson 1 first.

The median learner sent 67 answers on 2 different days. 56% of learners came back on a second day.

Learners used the solutions

Learners opened a worked solution 3,835 times. That is about one view for every three or four answers. Many people study from a worked answer and then try the next problem. That is a good way to use a solution.

What to do if you start SQL now

  1. Do not skip the arithmetic in the first lesson. Write the calculation in words, then as an expression. Add parentheses when the order matters.
  2. Keep the columns in the order that the problem asks for. We check columns by position, and you will find the same rule in many other SQL courses.
  3. Practice on more than one day. Short sessions on different days are better than one long session.
  4. Do not fear joins. Learn SELECT, WHERE and GROUP BY well first. Then joins are one more step.

What was the hardest part of SQL for you? Tell us in the comments.

Top comments (0)