Как выбрать первые строки по группе с предложением order by? - PullRequest
0 голосов
/ 25 сентября 2019

Я бы хотел выбрать 3 самых продаваемых книги по авторам, заказанным самой продаваемой.Технически, я хотел бы выбрать 3 верхние строки по каждой упорядоченной группе.

Это то, что у меня есть сейчас:

    select 
        author_id
        ,book_id
        ,count(book_id) top
    from book_author
    group by author_id, book_id
    order by author_id, top

Есть ли обходной путь?Я гуглил и нашел примеры, но ни один из них не использовал order by.

. Надеюсь, я хорошо объяснил свою проблему.Заранее спасибо.

1 Ответ

2 голосов
/ 25 сентября 2019

Я думаю, что вы хотите агрегации и row_number():

select author_id, book_id, cnt
from (select author_id, book_id, count(*) as cnt,
             row_number() over (partition by author_id order by count(*) desc) as seqnum
      from book_author ba
      group by author_id, book_id
     ) ba
where seqnum = 1
order by author_id, cnt desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...