<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SQLMaxx</title>
    <description>The latest articles on DEV Community by SQLMaxx (@sqlmaxx).</description>
    <link>https://dev.to/sqlmaxx</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4207441%2F1136e438-6273-48f5-8602-6ae1dd591b09.png</url>
      <title>DEV Community: SQLMaxx</title>
      <link>https://dev.to/sqlmaxx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sqlmaxx"/>
    <language>en</language>
    <item>
      <title>We counted 13,000 SQL answers from 99 learners. The hardest lesson was SELECT.</title>
      <dc:creator>SQLMaxx</dc:creator>
      <pubDate>Mon, 26 Oct 2026 23:53:14 +0000</pubDate>
      <link>https://dev.to/sqlmaxx/we-counted-13000-sql-answers-from-99-learners-the-hardest-lesson-was-select-3le</link>
      <guid>https://dev.to/sqlmaxx/we-counted-13000-sql-answers-from-99-learners-the-hardest-lesson-was-select-3le</guid>
      <description>&lt;p&gt;Most SQL courses warn you about joins. In our data, joins were not the hard part. The first lesson was.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;From August 19 to October 25, 2026, 99 learners with accounts sent 13,105 graded answers. Here is what we found.&lt;/p&gt;

&lt;p&gt;Also:&lt;br&gt;
&lt;a href="https://sqlmaxx.com/learn-sql/" rel="noopener noreferrer"&gt;Our SQL course, SQLMaxx Learn&lt;/a&gt;, is completely free, and you do not need an account to start.&lt;/p&gt;
&lt;h2&gt;
  
  
  How we counted, and what we cannot see
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;For each answer, we record three things: the lesson, correct or wrong, and the time it took.&lt;/li&gt;
&lt;li&gt;We do not see the SQL that you type. PostgreSQL runs it in your browser, and we never receive it.&lt;/li&gt;
&lt;li&gt;We left out our own test accounts and &lt;strong&gt;all guest sessions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;We show a lesson only when 15 or more learners answered problems in it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  SELECT was the hardest lesson in our SQL course
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lesson&lt;/th&gt;
&lt;th&gt;Answers that were correct&lt;/th&gt;
&lt;th&gt;Correct on the first try&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. SELECT&lt;/td&gt;
&lt;td&gt;58%&lt;/td&gt;
&lt;td&gt;70%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All lessons&lt;/td&gt;
&lt;td&gt;80%&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;"First try" is the first answer from each learner on each problem.&lt;/p&gt;

&lt;p&gt;"First try" is the first answer from each learner on each problem.&lt;/p&gt;

&lt;p&gt;The problems with the most wrong answers were not about SQL keywords. They were about arithmetic in a &lt;code&gt;SELECT&lt;/code&gt; list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A discount.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An invoice.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The invoice problem needs parentheses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3600&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;net_payment&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;-- 3360&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;05&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;net_payment&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;-- 3180&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without the parentheses, PostgreSQL multiplies first, and you get 3180 instead of 3360.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Joins were not the problem
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lesson&lt;/th&gt;
&lt;th&gt;Correct on the first try&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;17. INNER JOIN&lt;/td&gt;
&lt;td&gt;87%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18. LEFT JOIN&lt;/td&gt;
&lt;td&gt;88%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21. Self join&lt;/td&gt;
&lt;td&gt;88%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22. Joins across several tables&lt;/td&gt;
&lt;td&gt;90%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where learners stopped
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lesson&lt;/th&gt;
&lt;th&gt;Learners who answered at least one problem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. SELECT&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. FROM&lt;/td&gt;
&lt;td&gt;71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. NULL&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10. DISTINCT&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17. INNER JOIN&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27. Conditional aggregation&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The median learner sent 67 answers on 2 different days. 56% of learners came back on a second day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learners used the solutions
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do if you start SQL now
&lt;/h2&gt;

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

&lt;p&gt;What was the hardest part of SQL for you? Tell us in the comments.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>data</category>
      <category>learnsql</category>
    </item>
  </channel>
</rss>
