Search code examples
psqlrow-number

PSQL: ROW_NUMBER incremented continuously


Hi have the following tables T1:

 field1 | field3
--------+--------
 A1     | foo
 A2     | v1
 A3     | v2
 A4     | bar

and T2:

 field2 | field3 
--------+--------
 B1     | foo 
 B2     | bar

If I do the following request:

SELECT DISTINCT ON (T2.field2, T2.field3)
  T2.field2 AS F2,
  T2.field3 AS F3,
  ROW_NUMBER () OVER (ORDER BY T2.field3) AS F4
FROM T2
JOIN T1 ON T2.field3=T1.field3

... I get the following result :

F2:B1, F3:foo, F4:1
F2:B2, F3:bar, F4:4 // I would like F4:2

But I would like F4 to be incremented one by one... I think it is because of the join with T1 but I don’t know how to isolate the ROW_NUMBER...


Solution

  • works

    SELECT DISTINCT ON (T2.field2, T2.field3)
      T2.field2 AS F2,
      T2.field3 AS F3,
      ROW_NUMBER () OVER (ORDER BY T2.field3 DESC) AS F4
    FROM T2
    JOIN T1 ON T2.field3=T1.field3;
    

    also works AND DENSE_RANK() won't double count

    on line 302 here, I go over why I use DENSE_RANK instead of ROW_NUMBER or RANK https://github.com/pavankat/fantasy-football/blob/master/db/queries.sql

    SELECT DISTINCT ON (T2.field2, T2.field3)
      T2.field2 AS F2,
      T2.field3 AS F3,
      DENSE_RANK() OVER (ORDER BY T2.field3 DESC) AS F4
    FROM T2
    JOIN T1 ON T2.field3=T1.field3;