sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL distinkta flera kolumner

frågor löses vanligtvis med fönsterfunktioner:

select *
from (
   select book_id, author_id, mark, year, 
          row_number() over (partition by author_id order by case mark when 'GREAT' then 1 when 'MEDIUM' then 2 else 3 end) as rn
   from books
) t
where rn = 1;

Ovanstående är standard ANSI SQL, men i Postgres använder den (proprietära) distinct on är vanligtvis mycket snabbare:

select distinct on (author_id) book_id, author_id, mark, year, 
from books
order by author_id, 
         case mark when 'GREAT' then 1 when 'MEDIUM' then 2 else 3 end



  1. Postgres ON CONFLICT set kolumnreferens är tvetydig

  2. PL/SQL ORA-01422:exakt hämtning returnerar fler än begärt antal rader

  3. LISTAGG i ORACLE

  4. Hur kan jag INFOGA data i två tabeller samtidigt i SQL Server?