力扣高频SQL 50题(基础版)第二十七题之1193.每月交易

力扣高频SQL 50题(基础版)第二十七题

1193.每月交易

题目说明

表:Transactions

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| id | int |

| country | varchar |

| state | enum |

| amount | int |

| trans_date | date |

±--------------±--------+

id 是这个表的主键。

该表包含有关传入事务的信息。

state 列类型为 [“approved”, “declined”] 之一。

编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。

任意顺序 返回结果表。

实现过程

准备数据
Create table If Not Exists Transactions (id int, country varchar(4), state enum('approved', 'declined'), amount int, trans_date date)
Truncate table Transactions
insert into Transactions (id, country, state, amount, trans_date) values ('121', 'US', 'approved', '1000', '2018-12-18')
insert into Transactions (id, country, state, amount, trans_date) values ('122', 'US', 'declined', '2000', '2018-12-19')
insert into Transactions (id, country, state, amount, trans_date) values ('123', 'US', 'approved', '2000', '2019-01-01')
insert into Transactions (id, country, state, amount, trans_date) values ('124', 'DE', 'approved', '2000', '2019-01-07')
实现方式
select
    date_format(trans_date,'%Y-%m') month,
    country,
    count(trans_date) trans_count,
    sum(if(state='approved',1,0)) approved_count,
    sum(amount) trans_total_amount,
    sum(if(state='approved',amount,0)) approved_total_amount
from Transactions group by month,country;
结果截图

在这里插入图片描述

总结

取日期中的年月字段方法:

方法一:DATE_FORMAT() 函数

select trans_date,date_format(trans_date,'%Y-%m') month from Transactions;

在这里插入图片描述

方法二:

left(str, length)函数 #从左开始截取

select trans_date,left(trans_date, 7) month from Transactions;

在这里插入图片描述

方法三:substring(str, pos**,[length]) 函数**

str:要截取字符串的原始字符串 pos:从第几位开始截取 length:截取长度(如未设置,则为从截取位到末尾)

select trans_date,substring(trans_date, 1,7) month from Transactions;

在这里插入图片描述

方法四:substring_index(str, delim, count)

str:要截取字符串的原始字符串 delim:分隔符,确定字符串的位置 count:指定要返回字符串的数量。如果为正数,则从字符串的起始位置开始计数;如果为负数,从字符串的末尾开始计数。

select trans_date,substring_index(trans_date,'-',2) month from Transactions;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值