Postgresql - 获取列中具有最大值的行

eko*_*eko 2 sql postgresql greatest-n-per-group

我想形成一个 sql 查询,它返回一些行的数据,这些数据在某个组中具有最大值。考虑以下演示示例:

共有三个表:国家、出版商和书籍。每个出版商属于一个国家,每本书都有一个出版商。定义可能看起来像

Country(country_id, country_name)
Publisher(pub_id, pub_name, fk_pub_country)
Book(book_id, book_name, release_date, fk_book_publisher)
Run Code Online (Sandbox Code Playgroud)

我想选择按国家/地区分组的 (country_id, book_name),以便每一行都包含该国家/地区最近发行的书籍的名称。如果同一天发布多本书,我应该拿到id最高的那一本。

如果我只使用 group by -clause 和 max,则不能包含书名。如果我选择视图 (country_id, max_date) 并将其与出版商和书籍连接,我可能会收到每个国家/地区的多行。我怎样才能达到预期的结果?

Nic*_*nes 6

SELECT DISTINCT ON (country_id)
  country_id,
  book_name
FROM country
JOIN publisher ON fk_pub_country = country_id
JOIN book ON fk_book_publisher = pub_id
ORDER BY
  country_id,
  release_date DESC,
  book_id DESC
Run Code Online (Sandbox Code Playgroud)