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

详解力扣高频SQL50题之1084. 销售分析 III【简单】

传送门:1084. 销售分析 III

题目

表: Product

±-------------±--------+
| Column Name | Type |
±-------------±--------+
| product_id | int |
| product_name | varchar |
| unit_price | int |
±-------------±--------+
product_id 是该表的主键(具有唯一值的列)。
该表的每一行显示每个产品的名称和价格。
表:Sales

±------------±--------+
| Column Name | Type |
±------------±--------+
| seller_id | int |
| product_id | int |
| buyer_id | int |
| sale_date | date |
| quantity | int |
| price | int |
±----- ------±--------+
这个表可能有重复的行。
product_id 是 Product 表的外键(reference 列)。
该表的每一行包含关于一个销售的一些信息。

编写解决方案,报告 2019年春季 才售出的产品。即 仅 在 2019-01-01 (含)至 2019-03-31 (含)之间出售的商品。

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入:
Product table:
±-----------±-------------±-----------+
| product_id | product_name | unit_price |
±-----------±-------------±-----------+
| 1 | S8 | 1000 |
| 2 | G4 | 800 |
| 3 | iPhone | 1400 |
±-----------±-------------±-----------+
Sales table:
±----------±-----------±---------±-----------±---------±------+
| seller_id | product_id | buyer_id | sale_date | quantity | price |
±----------±-----------±---------±-----------±---------±------+
| 1 | 1 | 1 | 2019-01-21 | 2 | 2000 |
| 1 | 2 | 2 | 2019-02-17 | 1 | 800 |
| 2 | 2 | 3 | 2019-06-02 | 1 | 800 |
| 3 | 3 | 4 | 2019-05-13 | 2 | 2800 |
±----------±-----------±---------±-----------±---------±------+
输出:
±------------±-------------+
| product_id | product_name |
±------------±-------------+
| 1 | S8 |
±------------±-------------+
解释:
id 为 1 的产品仅在 2019 年春季销售。
id 为 2 的产品在 2019 年春季销售,但也在 2019 年春季之后销售。
id 为 3 的产品在 2019 年春季之后销售。
我们只返回 id 为 1 的产品,因为它是 2019 年春季才销售的产品。

解析

这题有坑点,不仔细的人是通不过的。首先,题目求的是售出的产品,所以如果产品id不在销售表中就无需展示,所以需要用内连接而不是左连接。连接完后按产品id分组,由于题目返回的是产品id和名称,所以Oracle中需要同时对产品id和名称分组。坑点来了,题目要求的是筛选仅在2019年春季售出的产品,仅在2019春季指一个产品对应的所有日期都在2019春季。不难想到,若该产品对应的售出日期的最小值不小于2019年春季第一天,最大值不超过2019年春季最后一天,则为仅在2019春季售出的产品。

算法(标准SQL)

内连接产品表和销售表,连接条件为产品表.产品id=销售表.产品id,再对产品id和名称分组,再筛选销售日期都在2019春季的产品,即该产品对应的售出日期的最小值不小于2019-01-01,最大值不大于2019-03-31,最后返回产品id和名字即可。

代码(标准SQL)

select p.product_id,p.product_name
from Product p
join Sales s
on p.product_id=s.product_id
group by p.product_id,p.product_name
having min(sale_date)>=date'2019-01-01'
and max(sale_date)<=date'2019-03-31';
http://www.dtcms.com/a/298923.html

相关文章:

  • 基于 Claude Code 与 BrowserCat MCP 的浏览器自动化全链路构建实践
  • OGG同步Oracle到Kafka不停库,全量加增量
  • 显式等待和隐式等待的区别
  • JavaScript 立即执行函数(IIFE)运行时行为分析笔记
  • 数控滑台的功能与应用
  • 生产环境使用云服务器(centOS)部署和使用MongoDB
  • MongoDB数据模型
  • Zookeeper的简单了解
  • 学习嵌入式的第三十三天-数据结构-(2025.7.25)服务器/多客户端模型
  • Typecho插件开发:自定义注册用户组与免审发布功能实现
  • OTG原理讲解
  • 非定长滑动窗口(持续更新)
  • 【GoLang#3】:数据结构(切片 | map 映射)
  • 新手向:Git下载全攻略
  • 用Java实现rpc的逻辑和流程图和核心技术与难点分析
  • 图论:Dijkstra算法
  • 【WPF】NumericUpDown的用法
  • 01 01 01 第一部分 C++编程知识 C++入门 第一个C++程序
  • Linux如何执行系统调用及高效执行系统调用:深入浅出的解析
  • HashMap(JDK1.7、JDK1.8)原理与结构分析与synchronizedMap()
  • Spring Boot SSE实战:SseEmitter实现多客户端事件广播与心跳保活
  • Spring Boot 实战:用 Apache Commons CSV 优雅解析 CSV 文件
  • x86汇编语言入门基础(三)汇编指令篇5 串操作
  • OpenCV学习探秘之一 :了解opencv技术及架构解析、数据结构与内存管理​等基础
  • 技术赋能与营销创新:开源链动2+1模式AI智能名片S2B2C商城小程序的流量转化路径研究
  • 嵌入式硬件篇---zigbee无线串口通信问题解决方法
  • Claude 4.0 终极编程指南:模型对比、API配置与IDE集成实战
  • CMakeLists.txt 怎么写
  • 39.Python 中 list.sort() 与 sorted() 的本质区别与最佳实践
  • 数据库索引详解:原理、设计原则与应用场景