【问题标题】:SQL : Max value based on multiple row valuesSQL:基于多行值的最大值
【发布时间】:2023-02-03 04:35:55
【问题描述】:

根据我的表:

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 层值)作为第二列。

【问题讨论】:

  • 为什么客户 C 被排除在结果之外?
  • 客户端 C 也可以在那里。对于每个客户,我都需要,为简单起见,我没有写 C
  • 那是为了混淆,而不是为了简单。示例数据和预期结果应该匹配,即minimal reproducible example。如果你让帮助你变得容易,你会得到更好的关注。

标签: sql postgresql group-by


【解决方案1】:

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

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;

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

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2016-10-23
    相关资源
    最近更新 更多