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 ...

Get PostgreSQL 10 High Performance now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.