本文主要是介绍每日一题-72(每月交易2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题72:
根据下表编写一个 SQL 查询,以查找每个月和每个国家/地区的信息,已批准交易的数量及其总金额、退单的数量及其总金额。
注意:在您的查询中,只需显示给定月份和国家,忽略所有为零的行。
其中:
- Transactions 表:id 是这个表的主键,该表包含有关传入事务的信息,状态列是类型为 [approved(已批准)、declined(已拒绝)] 的枚举;
- Chargebacks 表:退单包含有关放置在事务表中的某些事务的传入退单的基本信息,trans_id 是 transactions 表的 id 列的外键,每项退单都对应于之前进行的交易,即使未经批准。
解题思路:
(1)首先查出每个月和每个国家/地区的已批准交易的数量集其总金额;
(2)在查出每个月和每个国家/地区的退单的数量及其总金额;
(3)然后用union all进行合并
(4)最后统计、求和加分组排序即可
select month,country,count(case when state='approved' and tag=0 then 1 else null end ) as approved_count,sum(case when state='approved' and tag=0 then amount else 0 end ) as approved_amount,count(case when tag=1 then 1 else null end ) as chargeback_count,sum(case when tag=1 then amount else 0 end ) as chargeback_amount
from(select country,state,amount,date_format(c.trans_date,'%Y-%m') as month,1 as tagfrom Transactions t right join Chargebacks c on t.id=c.trans_idunion allselect country,state,amount,date_format(t.trans_date,'%Y-%m') as month,0 as tagfrom Transactions t where state!='declined'
) a
group by country,month
order by month,country;
这篇关于每日一题-72(每月交易2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!