sql sum 结果集不为零_leetcode(sql)之打标签

该博客讨论了如何使用SQL查询来统计每月交易、任务状态的连续日期、指定日期的产品价格以及查询球队积分。涉及对不同情况打标签,如批准交易与退单、任务成功与失败、产品价格修改前后,以及赢、平、输比赛的积分计算。通过创建新列、UNION ALL、GROUP BY和JOIN等操作来实现复杂查询。
摘要由CSDN通过智能技术生成

这种类型的题目需要对不同情况打上相应的标签,从而达到将两者区分开的目的

1.每月交易

Transactions 表:(交易)
+------+---------+----------+--------+------------+
| id   | country | state    | amount | trans_date |
+------+---------+----------+--------+------------+
| 101  | US      | approved | 1000   | 2019-05-18 |
| 102  | US      | declined | 2000   | 2019-05-19 |
| 103  | US      | approved | 3000   | 2019-06-10 |
| 104  | US      | approved | 4000   | 2019-06-13 |
| 105  | US      | approved | 5000   | 2019-06-15 |
+------+---------+----------+--------+------------+

Chargebacks 表:(退单)
+------------+------------+
| trans_id   | trans_date |
+------------+------------+
| 102        | 2019-05-29 |
| 101        | 2019-06-30 |
| 105        | 2019-09-18 |
+------------+------------+

编写一个 SQL 查询,以查找每个月和每个国家/地区的已批准交易的数量及其总金额、退单的数量及其总金额。注意,给定月份和国家,忽略所有为零的行。

Result 表:
+----------+---------+----------------+-----------------+-------------------+--------------------+
| month    | country | approved_count | approved_amount | chargeback_count  | chargeback_amount  |
+----------+---------+----------------+-----------------+-------------------+--------------------+
| 2019-05  | US      | 1              | 1000            | 1                 | 2000               |
| 2019-06  | US      | 3              | 12000           | 1                 | 1000               |
| 2019-09  | US      | 0              | 0               | 1                 | 5000               |
+----------+---------+----------------+-----------------+-------------------+--------------------+

思路:由于是两种情况:批准或者已批准退单,需新建一列来保存状态是approved还是approved,然后将两种状态union all作为完整的情况,然后分别再对不同的情况作相应的计数和求和;注意要对月份和国家作group by

select month, country,
sum(case when tag = 0 then 1 else 0 end) approved_count
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值