【问题标题】:Aggregate columns based on different conditions?根据不同的条件聚合列?
【发布时间】:2020-01-14 22:10:43
【问题描述】:

我有一个 Teradata 查询生成:

customer | order | amount | days_ago
123      | 1     | 50     | 2
123      | 1     | 50     | 7
123      | 2     | 10     | 19
123      | 3     | 100    | 35
234      | 4     | 20     | 20
234      | 5     | 10     | 10

考虑到绩效,为每位客户产生产出的最有效方式是什么,其中orders 是客户在过去 30 天内的不同订单数量,total 是不同订单数量的总和不管是几天前下的订单?

期望的输出:

customer | orders | total
123      | 2      | 160
234      | 2      | 30

【问题讨论】:

    标签: sql group-by teradata aggregate-functions query-performance


    【解决方案1】:

    根据您的规则,可能需要两个步骤 - 先去重然后聚合:

    SELECT customer, 
    SUM(CASE WHEN days_ago <=30 THEN 1 ELSE 0 END) AS orders,
    SUM(amount) AS total
     FROM
    (SELECT customer, order, MAX-or-MIN(amount) AS amount, MIN-or-MAX(days_ago) AS days_ago
    FROM your_relation
    GROUP BY 1, 2) AS DistinctCustOrder
    GROUP BY 1;
    

    【讨论】:

    • 我担心多选会影响性能,但这可能是唯一的方法。
    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 2021-12-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2019-05-07
    • 2016-10-02
    相关资源
    最近更新 更多