A Brightlane pricing analyst is reviewing the product catalogue from most to least expensive to identify the second pricing tier — the 5 products that sit immediately below the single most expensive item.
Write a query to return the ID, name, and price of those 5 products.
Assumptions:
- The
productstable contains every product in Brightlane's catalogue. - Sorted by
pricedescending, the most expensive product occupies row 1; the analyst wants rows 2 through 6. - To land on rows 2–6, skip the first row with
OFFSET 1, then take the next 5 withLIMIT 5.
Output:
- One row per product, with columns
id,name, andprice, sorted bypricedescending.
Schema · ecommerce 5 tables
Run previews · Check grades
Write a query, then run it to see results here.
Worked solution Try it yourself first
SELECT
id,
name,
price
FROM
products
ORDER BY
price DESC
LIMIT
5
OFFSET
1 The shape
OFFSET 1 skips the single most expensive product, and LIMIT 5 takes the next five — exactly the second pricing tier the analyst is reviewing.
Clause by clause
SELECT id, name, pricepicks the three columns the pricing review needs. Every other product attribute stays out.FROM productsreads the full catalogue. The "rows 2 through 6" cut happens via the sort plus theOFFSET/LIMITpair.ORDER BY price DESCsorts most expensive first. The top row is the one product the analyst is excluding; everything below it is the tier they want.LIMIT 5 OFFSET 5would be wrong here.LIMIT 5 OFFSET 1is the right pair: skip exactly one row (the most expensive product), then return the next five. Meridian T1 Carbon at1499lands as the first row of the result — row 2 of the sorted catalogue.
Why this and not LIMIT 6
LIMIT 6 would return the six most expensive products, including the one the analyst is explicitly excluding from the tier review. The shape of the question is "the five products immediately below the most expensive one," which means skipping one row before counting. OFFSET is the clause that does the skipping. It doesn't have to align with a page boundary — any non-negative integer is valid, including OFFSET 1 for trimming a single leading row.
The trap
A common slip is reading "rows 2 through 6" and reaching for OFFSET 2 LIMIT 5, on the intuition that OFFSET N means "start at row N." It doesn't. OFFSET N means "skip N rows," so OFFSET 2 lands on row 3, not row 2. To land on row 2, the skip is one row: OFFSET 1. The mental model that always works is to subtract: the first row of the result lives at position OFFSET + 1 in the sorted set.
You practiced using a small OFFSET to skip past leading rows you don't want. OFFSET doesn't have to be a page boundary — any non-negative integer works, which makes "skip the top N, then take the next M" a one-line operation.