postgresql SQL:基于多个行值的最大值

agyaoht7  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(160)

根据我的表格:

Client  Tier    Value
A        1       10
B        2       20
C        1       30
B        3       40
A        2       40
B        1       50
C        2       60
A        3       70
A        4       50

我正在尝试获取以下输出:

Client  max(1,2) Value  max(3,4) Value
A   40          70
B   50          40

使用Python我可以很容易地做到,但我是新的Postgres。所以基本上对于每个客户端,我需要得到最大值(层1值,层2值)作为第一列和最大值(层3值,层4值)作为第二列。

11dmarpk

11dmarpk1#

我们可以在这里使用条件聚合:

SELECT Client,
       MAX(CASE WHEN Tier IN (1, 2) THEN Value END) AS max_1_2,
       MAX(CASE WHEN Tier IN (3, 4) THEN Value END) AS max_3_4
FROM yourTable
GROUP BY Client;

或者,使用FILTER子句(Postgres在最近的版本中支持该子句),我们也可以将其编写为:

SELECT Client,
       MAX(Value) FILTER (WHERE Tier IN (1, 2)) AS max_1_2,
       MAX(Value) FILTER (WHERE Tier IN (3, 4)) AS max_3_4
FROM yourTable
GROUP BY Client;

相关问题