簡體   English   中英

每組只留下最大值

[英]Left only MAX value per group

我有這樣的表:

事務編號 …… 成本 每組最大成本
1234 ... 1550 1550
2342 ... 1950 2000
2342 ... 2000 2000
4444 ... 600 600
4444 ... 400 600
4444 ... 500 600

TransactionID——不唯一
- 很多列(30+)
成本——可能與一個 TransactionID 不同
MaxCostPerGroup列顯示每個 TransactionID 的最大值。

要繼續處理數據,我需要將表轉換為以下形式:

事務編號 …… 成本 每組最大成本
1234 ... 1550 1550
2342 ... 1950 null
2342 ... 2000 2000
4444 ... 600 600
4444 ... 400 null
4444 ... 500 null

然后我想按日期對 MaxCostPerGroup 求和(例如)。 問題是我必須保存每一行,我不能只分組。 在“...”部分有很多獨特的信息,這就是為什么我想在最后一列中為每個 TransactionID 只保留一個值。 我怎樣才能用 SQL 做到這一點?
非常感謝。

使用您的數據,我通過按TransactionId分區並添加 IF 語句來添加 NULL 來獲得最大值。

請參閱下面的查詢:

WITH sample_data as(
    select '1234' as TransactionID, 1550 as Cost, 1550 as MaxCostPerGroup,
    union all select '2342' as TransactionID, 1950 as Cost, 2000 as MaxCostPerGroup,
    union all select '2342' as TransactionID, 2000 as Cost, 2000 as MaxCostPerGroup,
    union all select '4444' as TransactionID, 600 as Cost, 600 as MaxCostPerGroup,
    union all select '4444' as TransactionID, 400 as Cost, 600 as MaxCostPerGroup,
    union all select '4444' as TransactionID, 500 as Cost, 600 as MaxCostPerGroup
),
get_max as (
    select TransactionId,
        Cost,
        max(MaxCostPerGroup) OVER (PARTITION BY TransactionId) as max_per_id
    from sample_data
),

add_null as (
    select TransactionId,
        Cost,
        max_per_id,
        if (Cost = max_per_id, max_per_id, NULL) as MaxCostPerGroup
    from get_max
)

select TransactionId,Cost,MaxCostPerGroup from add_null

Output:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM