首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Postgres SELECT GROUP BY最畅销项目by publisher by publisher

Postgres SELECT GROUP BY最畅销项目by publisher by publisher
EN

Stack Overflow用户
提问于 2013-03-07 02:54:35
回答 2查看 140关注 0票数 2

我有3张桌子:

代码语言:javascript
运行
复制
publisher (id serial pkey, pub_name text)
book (id serial pkey, id_pub INTEGER NOT NULL REFERENCES publisher (id), book_name TEXT)
rank (id SERIAL PKEY, id_book INTEGER NOT NULL REFERENCES book (id), week DATE, selling INTEGER)

并且只想列出每家出版商的畅销书。到目前为止,我所拥有的是所有图书的销售情况:

代码语言:javascript
运行
复制
SELECT publisher.pub_name, book.book_name, SUM(rank.selling)
 FROM rank, publisher, book
 WHERE rank.id_book = book.id AND book.id_pub = publisher.id
 GROUP BY publisher.pub_name, book.book_name;

像这样的返回:

代码语言:javascript
运行
复制
BigPublisher, Book1, 100300
GoodPublisher, BeBook, 10003
BigPublisher, Book2, 50200
OldPublisher, N-Book, 20009
GoodPublisher, CeBook, 4000
GoodPublisher, DeBook, 3001

我正在寻找这样的结果:

代码语言:javascript
运行
复制
BigPublisher, Book1, 100300
GoodPublisher, BeBook, 10003
OldPublisher, N-Book, 20009
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-07 03:22:32

代码语言:javascript
运行
复制
select
    distinct on (pub_name),
    pub_name,
    book_name,
    selling
from (
    select
        publisher.pub_name,
        book.book_name,
        sum(rank.selling) selling
    from
        publisher
        inner join 
        book on book.id_pub = publisher.id
        inner join
        rank on rank.id_book = book.id
    group by 1, 2
) s
order by pub_name, s.selling desc
票数 1
EN

Stack Overflow用户

发布于 2013-03-07 03:07:02

使用窗口函数。参见the window functions tutorial in the PostgreSQL documentation

您正在寻找类似以下内容的东西:

代码语言:javascript
运行
复制
SELECT
  rank() OVER (PARTITION BY publisher ORDER BY sum_of_sold DESC) AS pos
-- ... FROM clause etc here ...
WHERE pos = 1;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15255633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档