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

SQL实战训练之,力扣:1831. 每天的最大交易

目录

        一、力扣原题链接

        二、题目描述

        三、建表语句

        四、题目分析        

        五、SQL解答

        六、最终答案

        七、验证

        八、知识点


一、力扣原题链接

1831. 每天的最大交易

二、题目描述

交易表:Transactions

+----------------+----------+
| Column Name    | Type     |
+----------------+----------+
| transaction_id | int      |
| day            | datetime |
| amount         | int      |
+----------------+----------+
transaction_id 是该表具有唯一值的列。
每行包括了该次交易的信息。

编写一个解决方案,报告每天交易金额 amount 最大 的交易 ID 。如果一天中有多个这样的交易,返回这些交易的 ID 。

返回结果根据 transaction_id 升序排列

返回格式如下示例所示:

示例 1:

输入:
Transactions table:
+----------------+--------------------+--------+
| transaction_id | day                | amount |
+----------------+--------------------+--------+
| 8              | 2021-4-3 15:57:28  | 57     |
| 9              | 2021-4-28 08:47:25 | 21     |
| 1              | 2021-4-29 13:28:30 | 58     |
| 5              | 2021-4-28 16:39:59 | 40     |
| 6              | 2021-4-29 23:39:28 | 58     |
+----------------+--------------------+--------+
输出:
+----------------+
| transaction_id |
+----------------+
| 1              |
| 5              |
| 6              |
| 8              |
+----------------+
解释:
"2021-4-3"  --> 有一个 id 是 8 的交易,因此,把它加入结果表。 
"2021-4-28" --> 有两个交易,id 是 5 和 9 ,交易 5 的金额是 40 ,而交易 9 的数量是 21 。只需要将交易 5 加入结果表,因为它是当天金额最大的交易。
"2021-4-29" --> 有两个交易,id 是 1 和 6 ,这两个交易的金额都是 58 ,因此需要把它们都写入结果表。
最后,把交易 id 按照升序排列。

进阶:你可以不使用 MAX() 函数解决这道题目吗?

三、建表语句

drop table if exists Transactions;
Create table If Not Exists Transactions (transaction_id int, day date, amount int);
Truncate table Transactions;
insert into Transactions (transaction_id, day, amount) values ('8', '2021-4-3 15:57:28', '57');
insert into Transactions (transaction_id, day, amount) values ('9', '2021-4-28 08:47:25', '21');
insert into Transactions (transaction_id, day, amount) values ('1', '2021-4-29 13:28:30', '58');
insert into Transactions (transaction_id, day, amount) values ('5', '2021-4-28 16:39:59', '40');
insert into Transactions (transaction_id, day, amount) values ('6', '2021-4-29 23:39:28', '58');

四、题目分析

1、按照每天分组,交易金额倒序排名

2、筛选排名第1

五、SQL解答

with t1 as (
    select
        transaction_id, day, amount,
        -- 1、按照每天分组,交易金额倒序排名
        dense_rank() over (partition by day order by amount desc) dr
    from transactions
)
select
    transaction_id
from t1
-- 2、筛选排名第1
where dr = 1
order by transaction_id
;

六、最终答案

with t1 as (
    select
        transaction_id, day, amount,
        -- 1、按照每天分组,交易金额倒序排名
        dense_rank() over (partition by day order by amount desc) dr
    from transactions
)
select
    transaction_id
from t1
-- 2、筛选排名第1
where dr = 1
order by transaction_id
;

七、验证

八、知识点


http://www.kler.cn/news/367426.html

相关文章:

  • API接口开放与安全管控 - 原理与实践
  • 在linux系统中查看具体文件大小命令
  • SQL SERVER 2005/2008/2012/2016/2020 数据库状态为“可疑”的解决方法(亲测可用)
  • GeoWebCache1.26调用ArcGIS切片
  • 从汇编角度看C/C++函数指针与函数的调用差异
  • snmptranslate样例
  • C++网络编程之C/S模型
  • 服务器数据恢复—EXT3文件系统下邮件数据被误删的数据恢复案例
  • [网络协议篇] ICMP协议
  • 4-petalinux2018.3 摸索记录 -linux 驱动 (交叉编译)
  • QHeaderView添加复选框以及样式
  • R语言机器学习算法实战系列(十四): CatBoost分类算法+SHAP值 (categorical data gradient boosting)
  • LeetCode练习-删除链表的第n个结节
  • 医院信息化与智能化系统(10)
  • Nuxt.js交流社区,欢迎加入!
  • 报表工具怎么选?山海鲸VS帆软,哪个更适合你?
  • “循环购模式:革新消费体验,解锁收益新篇章“
  • 单值集合总复习
  • MySQL-DQL练习题
  • 2024.10.27 直接插入排序 非递归后序遍历(复杂版)
  • 基于STM32的智能寝室控制系统设计(论文+源码)
  • Spring Boot环境下论坛网站的架构与优化
  • idea 无法输入中文 快速解决
  • 2024 BuildCTF 公开赛|MISC
  • 【好玩的经典游戏】Docker环境下部署网页小游戏网站
  • 媒小象 1.7.2 | 完全免费的内容创作二创工具