Why ORDER BY ... LIMIT Gets It Wrong

Concepts covered: sqlRowNumber

The canonical solution to every top-N-per-group question has the same shape. Compute a row number inside each group, ordered by the ranking column. Wrap it in a CTE or subquery. Filter the outer query to keep only rows where the row number is at most N. That is it. Memorize this shape. Write it without thinking. The query you should be able to write from memory Why the outer filter is required You cannot put WHERE rn <= 3 in the same SELECT as the ROW_NUMBER. SQL evaluates WHERE before window functions. The rn column does not exist yet when WHERE runs. You have to compute rn first (in a CTE or subquery), then filter on it in an outer query. The classic failure here is collapsing both steps into one SELECT and watching the engine throw a syntax error live. The CTE is not optional. Write it,

About This Interactive Section

This section is part of the Top N Per Group: Beginner lesson on DataDriven, a free data engineering interview prep platform. Each section includes explanations, worked examples, and hands-on code challenges that execute in real time. SQL queries run against a live database. Python runs in a sandboxed Docker container. Data modeling problems validate against interactive schema canvases. All content is framed around what data engineering interviewers actually test at companies like Meta, Google, Amazon, Netflix, Stripe, and Databricks.

How DataDriven Lessons Work

DataDriven combines four interview rounds (SQL, Python, Data Modeling, Pipeline Architecture) with adaptive difficulty and spaced repetition. Easy problems get harder as you improve. Weak concepts resurface until you master them. Your readiness score tracks progress across every topic interviewers test. Every lesson section ends with problems you solve by writing and running real code, not by picking multiple-choice answers.