当前位置: 首页 > news >正文

详解力扣高频SQL50题之1193. 每月交易 I【简单】

传送门:1193. 每月交易 I

题目

表: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 |
±---------±--------±------------±---------------±-------------------±----------------------+

解析

官方又在唬人了,这题看着返回字段多,其实不难,应该是简单难度而不是中等。首先按月份和国家分组,提取月份不同数据库有不同实现,由于本人用的是oracle,所以用to_char()函数。其次,事务个数用count(*)统计全组,批准个数用sum()+case when,当事务批准时返回1,否则返回0,总交易金额用sum()统计全组,批准总金额用sum()+case when,当事务批准时返回金额,否则返回0。

算法(Oracle)

查询事务表,按国家和月份分组,其中月份用to_char()获取,再用count()统计事务个数,用sum()+case when统计批准个数,当事务批准时返回1,否则返回0,用sum()统计总交易金额,用sum()+case when统计批准总金额,当事务批准时返回金额,否则返回0,最后返回月份,国家,事务个数,批准个数,总交易金额,批准总金额。

代码(Oracle)

select to_char(trans_date,'yyyy-mm') as month,country,
count(*) as trans_count,
sum(case when state='approved' then 1 else 0 end)as approved_count,
sum(amount) as trans_total_amount,
sum(case when state='approved' then amount else 0 end)
as approved_total_amount
from Transactions
group by country,to_char(trans_date,'yyyy-mm');
http://www.lryc.cn/news/600347.html

相关文章:

  • 深度解析【JVM】三大核心架构:运行时数据区、类加载与垃圾回收机制
  • JAVA算法题练习day1
  • Word文档转HTML查看器(字体颜色、字体背景、超链接、图片、目录等全部转换为html),统计Word文档段落数量、图片数量、表格数量、列表数量
  • 英语中因首字母大小写不同而意义不同的单词表
  • pyskl-Windows系统使用自己的数据集训练(一)
  • 习题5.7 如何分解能使这些数的乘积最大
  • tauri2项目配置update自动更新在自己电脑上编译
  • 【web大前端】001_前端开发入门:创建你的第一个网页
  • 顶顶通呼叫中心系统之创建与注册分机
  • Javaweb————HTTP的九种请求方法介绍
  • 开源智能体框架(Agent Zero)
  • 学习日志19 python
  • 今天凌晨,字节开源 Coze,如何白嫖?
  • 【19】C# 窗体应用WinForm ——【列表框ListBox、复选列表框CheckedListBox】属性、方法、实例应用
  • Rust Web框架性能对比与实战指南
  • 面试150 阶乘后的零
  • npm ERR! cb() never called!
  • Java操作Excel文档
  • Flink是如何实现物理分区?
  • Spring Cloud Gateway:微服务架构下的 API 网关详解
  • 【星野AI】minimax非活动时间充值优惠漏洞
  • 在Word和WPS文字中要同时查看和编辑一个文档的两个地方?拆分窗口
  • 机器语言基本概念
  • GIS地理信息系统建设:高精度3D建模
  • PHP框架之Laravel框架教程:1. laravel搭建
  • HTML5 Canvas 绘制圆弧效果
  • 通过不同坐标系下的同一向量,求解旋转矩阵
  • 企业级 AI 工具选型报告:9 个技术平台的 ROI 对比与部署策略
  • 【教程】无需迁移IDE!Augment原生插件实现Cursor无缝平替 Claude-4无限用
  • C++学习之深入学习模板(进阶)