首页 > 其他分享 >Leetcode 1193. 每月交易Ⅰ

Leetcode 1193. 每月交易Ⅰ

时间:2023-09-14 11:34:00浏览次数:40  
标签:01 每月 1193 state Leetcode amount date trans approved

1193. 每月交易Ⅰ

题目

表:Transactions

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| country       | varchar |
| state         | enum    |
| amount        | int     |
| trans_date    | date    |
+---------------+---------+
id 是这个表的主键。
该表包含有关传入事务的信息。
state 列类型为 ["approved", "declined"] 之一。

编写一个 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                  |
+----------+---------+-------------+----------------+--------------------+-----------------------+

本题使用到的 MySQL 函数的说明:

  • DATE_FORMAT(date, format):用于以不同的格式显示日期/时间数据。date 参数是合法的日期,format 规定日期/时间的输出格式。

DATE_FORMAT() 函数、GROUP BY

思路

本题要求 查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额,我们可以将这句话拆分成几个子任务:

  1. 查找每个月和每个国家/地区。 数据表中的 trans_date 是精确到日,我们可以使用 DATE_FORMAT() 函数将日期按照年月 %Y-%m 输出。比如将 2019-01-02 转换成 2019-01
DATE_FORMAT(trans_date, '%Y-%m')

获取到所有的月份后,使用 GROUP BY 聚合每个月和每个国家的记录就完成了第一步。

  1. 查找总的事务数。 第一步已经将数据按月和国家聚合,只需要使用 COUNT 函数就能获取到总的事务数。
COUNT(*) AS trans_count
  1. 查找总金额。 使用 SUM 函数计算总金额。
SUM(amount) AS trans_total_amount
  1. 查找已批准的事物数。 已批准的事物的 state 标记为 approved。首先使用 IF 函数将 state = 'approved' 的记录标记为 1,否则为 NULL。再使用 COUNT 计算总量。
COUNT(IF(state = 'approved', 1, NULL)) AS approved_count
  1. 查找已批准的事物的总金额。 和第四步一样,先使用 IF 函数,再使用 SUM 函数。
SUM(IF(state = 'approved', amount, 0)) AS approved_total_amount

sql

SELECT DATE_FORMAT(trans_date, '%Y-%m') AS month,
    country,
    COUNT(*) 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

标签:01,每月,1193,state,Leetcode,amount,date,trans,approved
From: https://www.cnblogs.com/chy07/p/17702084.html

相关文章

  • [LeetCode] 85. Maximal Rectangle_Hard tag: Dynamic Programming
    Givena rowsxcols binary matrix filledwith 0'sand 1's,findthelargestrectanglecontainingonly 1'sandreturn itsarea. Example1:Input:matrix=[["1","0","1","0","0"],["1&q......
  • LeetCode349 两个数组的交集
    LeetCode349 两个数组的交集https://leetcode.cn/problems/intersection-of-two-arrays/学习内容给两个数组,返回这两个数组的交集。如一个数组是22946,一个数组是1221,这两个数组的交集是2。用数组来保存交集,可能会没有去重。交集为元素2就可以了。这道题目用set来解决的一个比较好......
  • leetcode 二叉树的最大深度
    给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2解题思路这里可以转化思路为计算当前节点左子树的深度和右子树的深度......
  • Leetcode 27. 移除元素
    题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。双指针Pyth......
  • leetcode547省份数量
    深度优先搜索vector<bool>vis;intnum=0;voiddfs(vector<vector<int>>&isConnected,intx){vis[x]=true;for(inti=0;i<isConnected[x].size();i++){if(!vis[i]&&isConnected[x][i]){dfs(isConnected,i);......
  • 【Leetcode】解题报告Day1~Day2
    解题报告Day11.2235.两数之和给你两个整数num1和num2,返回这两个整数的和。示例1:输入:num1=12,num2=5输出:17解释:num1是12,num2是5,它们的和是12+5=17,因此返回17。示例2:输入:num1=-10,num2=4输出:-6解释:num1+num2=-6,因此返回-6。提示:......
  • LeetCode 1934.确认率
    1934.确认率1.问题关键精炼:确认率是confirmed消息的数量除以请求的确认消息的总数。没有请求任何确认消息的用户的确认率为0。确认率四舍五入到小数点后两位2.难点解析:我觉得这道题是考察AVG函数的使用。根据需求可以看出,答案也就是一个公式:confirmed消息的数量/总......
  • leetcode841钥匙和房间
    使用深度优先遍历构造的图,只要访问过就标记已访问intnum=0;vector<bool>vis;voiddfs(vector<vector<int>>&rooms,intx){vis[x]=true;num++;for(auto&v:rooms[x]){if(!vis[v])dfs(rooms,v);//说明这个房间没有进去过,所以可以访问}}intmai......
  • leetcode450删除搜索二叉树的节点
    删除的二叉树节点分4种情况:叶子节点,直接删除就行左节点不为空,右节点为空;直接将左子树返回左节点为空,右节点不为空;直接将右子树返回左节点和右节点不为空;将右子树最小的节点作为根节点,返回右子树TreeNode*deleteNode(TreeNode*root,intkey){if(!root)returnn......
  • Leetcode 26. 删除有序数组中的重复项
    题目描述给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。双指针Python实现defremoveDuplicates(nums:List[int])->int:......