【问题标题】:SQL create a new column based on the contentsSQL根据内容创建一个新列
【发布时间】:2016-04-26 00:46:05
【问题描述】:

我有一个这样的sql表

saledate | user_id | Purchase or Return | trans_amount
2016/4/1 | 001      | Purchase           | 100
2016/4/1 | 001      | Return             | 200
2016/4/2 | 002      | Purchase           | 300
2016/4/2 | 003      | Purchase           | 200
2016/4/2 | 004      | Return             | 100
...

如何运行查询来更改表,使其看起来像这样:

saledate | transaction_type | number of unique user_ids | total_amount
2016/4/1 | Purchase only    | 20                        | 1000
2016/4/1 | Return only      | 30                        | 1000
2016/4/1 | Purchase_return  | 40                        | 2000
...

谢谢!

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql split group-by


【解决方案1】:

我认为您将需要两个级别的聚合:

select salesdate, transaction_type,
       count(*) as NumUsers, sum(amount) as total_amount
from (select user_id, salesdate,
             (case when max(PurchaseOrReturn) = min(PurchaseOrReturn)
                   then max(PurchaseOrReturn) else 'Both'
              end) as transaction_type,
             sum(trans_amount) as amount
      from t
      group by user_id, salesdate
     ) t
group by salesdate, transaction_type
order by salesdate, transaction_type;

【讨论】:

  • 感谢戈登的回答。这部分“max(PurchaseOrReturn) = min(PurchaseOrReturn) then max(PurchaseOrReturn) else 'Both' end”的情况是我想不通的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
相关资源
最近更新 更多