Выбор максимального результата из каждой строки - PullRequest
0 голосов
/ 07 марта 2020

У меня есть следующий запрос, который определяет самые высокие просмотры:

SELECT 
    ti.num_views_per_telecast,
    t.episode_name,
    t.series_name
FROM (
    SELECT 
        ti.telecast_id,
        ti.network_id,
        count(*) as num_views_per_telecast
    FROM tunein AS ti
    INNER JOIN affiliates AS a ON ti.network_id = a.network_id
    WHERE ti.dvr_time_shift = 'L' and a.network_name = 'ABC'
    GROUP BY ti.telecast_id, ti.network_id
)ti
INNER JOIN telecast AS t ON t.telecast_id = ti.telecast_id
ORDER BY ti.num_views_per_telecast DESC

В настоящее время результаты возвращаются так:

    num_views telecast          Episode Name            Series        

        100                         Football Game           Football       
        99                          Football Game           Football
        88                             Dancing 1              DWTS
        66                             Survivor               SVR
        55                             Survivor               SVR
        44                             Dancing 2              DWTS

        ...

Я хочу, чтобы он показывал только топ Эпизод для каждой серии, как бы я отобразил, чтобы он возвращался так:

num_views telecast          Episode Name            Series        

100                         Football Game           Football       
88                             Dancing 1              DWTS
66                             Survivor               SVR
...

Я пробовал функцию Макс, но она вернула только лучший результат для всего, что я поставил перед

1 Ответ

1 голос
/ 07 марта 2020

Один метод использует ROW_NUMBER(). Я думаю, что проще объединить объединения в подзапросе, чем предварительно агрегировать.

SELECT num_views_per_telecast, episode_name, series_name
FROM (
    SELECT 
        COUNT(*) as num_views_per_telecast,
        t.episode_name,
        t.series_name,
        ROW_NUMBER() OVER(PARTITION BY t.series_name ORDER BY COUNT(*) DESC) rn
    FROM tunein AS ti
    INNER JOIN affiliates AS a ON ti.network_id = a.network_id
    INNER JOIN telecast   AS t ON t.telecast_id = ti.telecast_id
    WHERE ti.dvr_time_shift = 'L' and a.network_name = 'ABC'
    GROUP BY ti.telecast_id, ti.network_id, t.episode_name, t.series_name
) t
WHERE rn = 1
ORDER BY num_views_per_telecast DESC
...