【问题标题】:How to do aggregation based on amount and currency in SQL Teradata?如何在 SQL Teradata 中根据金额和货币进行聚合?
【发布时间】:2021-09-07 11:43:54
【问题描述】:

我在 SQL Teradata 中有如下表:

client|currency|amount
------|--------|-----
1233  |CZK     |300
1233  |CZK     |100
4577  |EUR     |200
1233  |EUR     |500

我想计算每个客户在每种货币中的总金额和平均金额,以及使用每种货币为客户进行的交易次数。

所以使用上表我需要得到如下结果:

client|avg_CZK |sum_CZK | avg_EUR | sum_EUR|number_CZ|number_EUR|
------|--------|--------|---------|--------|---------|----------
1233  |200     |400     | 500     |500     |2        |1
4577  |0       |0       |200      |200     |0        |1

如何在 SQL Teradata 中做到这一点?

【问题讨论】:

    标签: sql teradata aggregation


    【解决方案1】:

    只使用条件聚合:

    select client,
           avg(case when currency = 'CZK' then amount end) as avg_czk,
           sum(case when currency = 'CZK' then amount end) as sum_czk,
           avg(case when currency = 'EUR' then amount end) as avg_eur,
           sum(case when currency = 'EUR' then amount end) as sum_eur,
           sum(case when currency = 'CZK' then 1 else 0 end) as num_czk,
           sum(case when currency = 'EUR' then 1 else 0 end) as num_eur
    from t
    group by client;
    

    【讨论】:

    • 很好,但我认为在 num_czk 和 num_eur 中应该是 sum() 而不是 avg,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2020-06-28
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多