Numbering rows in SQL
Let's say you wanted to know who your top five customers are. That's an easy enough query to write:
SELECT customerid,sum(netamount) as sales FROM orders GROUP BY customerid ORDER BY sales DESC LIMIT 5; customerid | sales ------------+--------- 15483 | 1533.76 9315 | 1419.19 15463 | 1274.29 10899 | 1243.14 3929 | 1196.87
Here's a challenge for you: how would you write this query to also include that sales ranking for each customer, from 1 to 5, as part of this list? It's not a simple problem.
One of the subtle things about SQL queries is that each row is its own independent piece. It doesn't have any notion of how many other rows exist in the result set, where it stands in relation to the others; it's just a row of data. There are a couple of ways to solve this problem by using temporary tables, joining the output from generate_series
against a primary key when one exists, and processing in a...