【SQL】力扣1445. 苹果和桔子

1445. 苹果和桔子

【SQL】力扣1445. 苹果和桔子

在本篇博客中,我们将深入探讨力扣(LeetCode)数据库题目1445 ------ "苹果和桔子"的详细解题步骤。我们会分析题目需求,然后详细解释SQL查询的构建过程,并对其时间复杂度进行分析。

题目描述

在数据库表Sales中记录了每日苹果和桔子的销售数据。我们的任务是编写SQL查询,以报告每天苹果和桔子销售数量的差异。查询结果需要按照sale_date字段的升序排列。

输入输出示例

输入 是一个名为Sales的表,结构如下:

sale_date fruit sold_num
2020-05-01 apples 10
2020-05-01 oranges 8
2020-05-02 apples 15
2020-05-02 oranges 15
2020-05-03 apples 20
2020-05-03 oranges 0
2020-05-04 apples 15
2020-05-04 oranges 16

输出 是一个包含sale_datediff(苹果与桔子销售数量差异)的表,关于给定示例的输出应如下:

sale_date diff
2020-05-01 2
2020-05-02 0
2020-05-03 20
2020-05-04 -1

解释:

  • 在 2020-05-01,卖了10个苹果和8个桔子(差异为 10 - 8 = 2)。
  • 在 2020-05-02,卖了15个苹果和15个桔子(差异为 15 - 15 = 0)。
  • 在 2020-05-03,卖了20个苹果和0个桔子(差异为 20 - 0 = 20)。
  • 在 2020-05-04,卖了15个苹果和16个桔子(差异为 15 - 16 = -1)。

解题思路

此题的关键在于理解如何区分苹果和桔子的销售数目,并计算它们的差值。为了实现这点,我们利用SUM函数结合IF语句,将苹果的销售数作为正值,桔子的销售数作为负值,然后对每天的销售记录求和,得到最终的差值。下面,我们将逐步解析这个过程。

SQL查询构建
  1. 利用SELECT语句,我们首先选择了sale_date作为需要返回的第一个字段。
  2. 应用SUMIF函数,若fruit列的值为'apples',则sold_num作为正数;否则,苹果之外的水果(此例中为桔子)计为负数,之后对这些值求和,得到diff
  3. 使用GROUP BY语句来按sale_date对结果进行分组,这样就可以为每天计算苹果和桔子销售数目的差异。
  4. 最后,利用ORDER BY语句确保结果按照日期的升序排列。

下面是整个SQL查询的代码:

sql 复制代码
SELECT
    sale_date,
    SUM(IF(fruit='apples', sold_num, -sold_num)) AS diff
FROM
    Sales
GROUP BY
    sale_date
ORDER BY
    sale_date ASC
复杂度分析

时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n是Sales表中的记录数。这是因为GROUP BY通常需要对数据进行排序,而排序的时间复杂度至少为 O ( n log ⁡ n ) O(n \log n) O(nlogn)。

总结

通过合理利用SQL的聚合函数和条件表达式,我们可以轻松构建出一个既简洁又高效的查询来解决问题。

相关推荐
灯澜忆梦6 分钟前
【MySQL11】进阶篇 | 索引_#3使用规则
数据库·sql·mysql·性能优化
名字还没想好☜10 分钟前
Go 的 sync.Cond 实战:用条件变量做等待/通知,比忙轮询省 CPU
开发语言·数据库·后端·golang·go
wWYy.1 小时前
Mysql:有哪些锁?
数据库·mysql
李可以量化1 小时前
Tornado 从了解到精通(一)下:异步与非阻塞 IO 核心原理
java·数据库·tornado
云技纵横1 小时前
线上接口突然超时,怎么判断卡在 Nginx、线程池、连接池还是 SQL?
后端·sql·mysql
VALENIAN瓦伦尼安教学设备1 小时前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法
Wang's Blog1 小时前
AI Agent白手起家58: 项目可观测性——用 LangSmith 实现全链路追踪
数据库·人工智能
wabs6662 小时前
关于哈希表【力扣15.三数之和的思考】
数据结构·算法·leetcode·散列表·哈希表·三数之和
退休倒计时2 小时前
【每日一题】LeetCode 88. 合并两个有序数组 TypeScript
算法·leetcode·职场和发展·typescript
SL_staff2 小时前
JVS数字底座实践:如何复用企业文档能力快速构建知识类应用
java·数据库·程序员