首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:如何使用条件聚合值(CASE WHEN?)

SQL:如何使用条件聚合值(CASE WHEN?)
EN

Stack Overflow用户
提问于 2016-09-26 04:48:35
回答 4查看 90关注 0票数 0

我的数据有3个变量,用户ID、交易金额和交易日期,我想为每个用户ID汇总2天的交易金额,但有条件。

条件是,例如,我想要汇总ID 12345的8/31和8/30交易金额,如果此ID在8/31的交易金额为0,这意味着此ID在8/31没有任何交易,则忽略此用户ID,我不会汇总此用户ID的金额。

如果另一个ID 23456在8/31有事务,而在8/30没有事务,那么我将在8/31汇总此ID的事务。

如果一个ID 34567在8/30和8/31都有事务,那么我将聚合8/30和8/31的事务。

我该怎么做呢?我整个下午都在挣扎。提前感谢您的任何建议和想法!

EN

回答 4

Stack Overflow用户

发布于 2016-09-26 05:04:44

基于你的问题应该是

代码语言:javascript
复制
 select  user_id, sum(a.transaction_amount + b.transaction_amount).
 from my_table as a
 inner join  my_table as b on date_add(b.transaction_date, interval 1 day) =  a.transaction_date
 where date(a.transaction_date) =  STR_TO_DATE('31,8,2016','%d,%m,%Y')
 and a.transaction_amount > 0
 group by user_id
票数 1
EN

Stack Overflow用户

发布于 2016-09-26 05:11:17

代码语言:javascript
复制
SELECT User_ID, SUM(Transaction_Amount)
FROM yourTable
WHERE DATE(Transaction_Date) = '2016-08-30'
  OR (DATE(Transaction_Date) = '2016-08-31' AND Transaction_Amount > 0)
GROUP BY User_ID
票数 0
EN

Stack Overflow用户

发布于 2016-09-26 05:15:24

只需使用条件聚合:

代码语言:javascript
复制
select userid,
       sum(case when date = '2016-08-30' then amount else 0 end) as amt_20160830,
       sum(case when date = '2016-08-31' then amount else 0 end) as amt_20160831
from t
group by userid
having sum(case when date = '2016-08-31' then amount else 0 end) > 0;

代码的确切外观可能因数据库而异,但这是相当标准的SQL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39691702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档