首页 > 解决方案 > 为其他两列中的每个值从列中选择最大值

问题描述

我正在开发一个跟踪电视节目的网络应用程序,我需要获取所有季终集的剧集 ID,这意味着所有电视节目的所有季节中的最高集数。

这是我的“剧集”表的简化版本。

 id   tvshow_id   season   epnum
 ---|-----------|--------|-------
 1  |     1     |    1   |   1
 2  |     1     |    1   |   2
 3  |     1     |    1   |   3
 4  |     1     |    2   |   1
 5  |     1     |    2   |   2
 6  |     2     |    1   |   1
 7  |     2     |    1   |   2
 8  |     2     |    1   |   3
 9  |     2     |    1   |   4
10  |     2     |    2   |   1
11  |     2     |    2   |   2

预期输出:

 id
 ---|
 3  |
 5  |
 9  |
11  |

我已经设法让它在最新一季工作,但我不能让它在所有季节都工作。

我也尝试从中汲取一些想法,我似乎找不到在其中添加 tvshow_id 的方法。

我正在使用 Postgres v10

标签: sqlpostgresql

解决方案


您可以使用以下 SQL 来获取结果,将 GROUP BY 与子子查询一起使用:

select id from tab_x
where (tvshow_id,season,epnum) in (
select tvshow_id,season,max(epnum)
from tab_x
group by tvshow_id,season)

推荐阅读