sql >> Databáze >  >> RDS >> PostgreSQL

SQL odlišné více sloupců

otázky se obvykle řeší pomocí okenních funkcí:

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;

Výše uvedené je standardní ANSI SQL, ale v Postgresu se používá (proprietární) distinct on je obvykle mnohem rychlejší:

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. Jak zastavit nebo omezit provoz SST na Galera Cluster

  2. Jak získat druhý největší nebo třetí největší záznam z tabulky

  3. Problémy s TransactionScope a Oracle

  4. Metadata vestavěných funkcí Oracle