SQL получить 10 лучших записей для каждой категории: избегайте подзапросов - PullRequest
0 голосов
/ 23 января 2020

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

Необходимо найти топ-10 видео Youtube для каждой из 20 стран на основе суммы просмотров. Сумма рассчитывается внутри запроса;

Select country, video, sum(views)
From t1
Group by 1,2

Это упрощенная версия запроса. Когда я пытался выполнить Rank () и использовать подзапросы, выполнение запроса длилось вечно, так что, надеюсь, кто-нибудь подскажет мне другую идею:

Выполнение в Amazon Redshift

1 Ответ

2 голосов
/ 23 января 2020

Я не знаю способа сделать это без подзапросов - если только вы не используете трюк с семантикой c, например, "CTE не являются подзапросами" или "представления" не являются подзапросами.

Вот лог c, который делает то, что вы хотите, используя подзапрос:

select country, video, sum_views
from (Select country, video, sum(views) as sum_views,
             row_number() over (partition by country order by sum(views) desc) as seqnum
      From t1
      Group by 1, 2
     ) x
where seqnum <= 10;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...