Database

Select first row for each group in PostgreSQL


Given a table seasons:

idteampoints
1Liverpool82
2Liverpool84
3Brighton34
4Brighton28
5Liverpool79

We want to find the rows containing the maximum number of points per team.

The expected output we want is:

idteampoints
3Brighton34
2Liverpool84

From the SQL Editor, you can run a query like:

1
2
3
4
5
6
7
8
9
10
select distinct on (team) id, team, pointsfrom seasonsorder BY id, points desc, team;

The important bits here are:

  • The desc keyword to order the points from highest to lowest.
  • The distinct keyword that tells Postgres to only return a single row per team.

This query can also be executed via psql or any other query editor if you prefer to connect directly to the database.