[英]SQL distinct multiple columns
我有一張表如下:
book_id author_id mark year
1 1 BAD 2014
1 1 MEDIUM 2014
1 1 GREAT 2015
我想執行一個查詢,為每位作者提供最好的書。 像這樣的東西:
book_id author_id mark year
1 1 GREAT 2015
我嘗試在多個字段上使用distinct關鍵字 - 但是當我這樣做時:
select distinct book_id, author_id from Books
我只得到book_id和author_id(如預期的那樣) - 但我也需要標記和年份 - 但我不能將它添加到不同的短語中。
目前我正在使用Postgres 9.4但我需要一個ANSI-SQL解決方案。
有沒有辦法可以做到這一點?
每組最大n個問題通常使用窗口函數來解決:
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;
以上是標准的ANSI SQL,但在Postgres中使用(專有) distinct on
通常要快得多:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.