前述
知识点学习:
- SQL 日期函数 day() 、month()、year() 各种使用方法
- mysql 两个字符年月拼接
题目描述
leetcode题目:1193. 每月交易 I
思路
先按照年月排,再按照country排列
日期拼接相关的函数
year()
: 截取年份;month()
:截取月份;day()
: 截取日期;concat()
:字符串拼接;LPAD()
: 在月份前补齐0,确保月份是两位数。'-'
:分隔符,举例:‘2018-12’ 中的 ‘-’DATE_FORMAT()
:格式化日期。DATE_FORMAT('2018-12-23', '%Y-%m')
注意:对比区分
count(if(state='approved', 1, null))
sum(if(state='approved', 1, 0))
写法一
selectconcat(year(trans_date), '-', lpad(month(trans_date), 2, '0')) as `month`,country,count(id) as trans_count,sum(if(state='approved', 1, 0)) as approved_count,sum(amount) as trans_total_amount,sum(if(state='approved', amount, 0)) as approved_total_amount
from Transactions
group by year(trans_date), month(trans_date) , country
执行用时分布601ms,击败57.76%使用 MySQL 的用户
写法二
select date_format(trans_date, '%Y-%m') as `month`,country,count(id) as trans_count,count(if(state='approved', 1, null)) as approved_count,sum(amount) as trans_total_amount,sum(if(state='approved', amount, 0)) as approved_total_amount
from Transactions
group by `month`, country
执行用时分布 852ms,击败28.66%使用 MySQL 的用户