Table: Transactions
Column Name | Type |
---|---|
id | int |
country | varchar |
state | enum |
amount | int |
trans_date | date |
id 是这个表的主键。
该表包含有关传入事务的信息。
state 列类型为 “[”批准“,”拒绝“] 之一。
问题
编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。
以 任意顺序 返回结果表。
示例 1:
输入:
Transactions table:
id | country | state | amount | trans_date |
---|---|---|---|---|
121 | US | approved | 1000 | 2018-12-18 |
122 | US | declined | 2000 | 2018-12-19 |
123 | US | approved | 2000 | 2019-01-01 |
124 | DE | approved | 2000 | 2019-01-07 |
输出:
month | country | trans_count | approved_count | trans_total_amount | approved_total_amount |
---|---|---|---|---|---|
2018-12 | US | 2 | 1 | 3000 | 1000 |
2019-01 | US | 1 | 1 | 2000 | 2000 |
2019-01 | DE | 1 | 1 | 2000 | 2000 |
解答
select
left(trans_date,7) month,
country,
count(state) trans_count,
sum(state='approved') approved_count, #1
sum(amount) trans_total_amount,
sum(if(state='approved',amount,0)) approved_total_amount
from transactions
group by month,country
逻辑很简单,但是对count()和sum()要求掌握很熟练,才能用对。
比如1处,求已批准的事务数,要么sum(state=‘approved’)—符合条件的+1,要么count(if(state=‘approved’,1,null)—count()不对null值计数,而不能是count(state=‘approved’),这样不管记录是否满足条件表达式,只要非NULL就加1。