簡體   English   中英

SQL不同的多列

[英]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解決方案。

有沒有辦法可以做到這一點?

問題通常使用窗口函數來解決:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM