2022年10月更文挑战30-9-leetcode刷题1084-销售分析3

73 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

leetcode刷题1084-销售分析3

前文

本文内容为leetcode数据库类型题目,主要考察对于查询条件的处理。本题目的解答方案为个人的一种方法,并非最佳方案。本题目的题目序号为1084,题目链接为leetcode.cn/problems/sa…

题目信息

Table: Product

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| product_id   | int     |
| product_name | varchar |
| unit_price   | int     |
+--------------+---------+

Product_id是该表的主键。 该表的每一行显示每个产品的名称和价格。 Table: Sales

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| seller_id   | int     |
| product_id  | int     |
| buyer_id    | int     |
| sale_date   | date    |
| quantity    | int     |
| price       | int     |
+------ ------+---------+

这个表没有主键,它可以有重复的行。 product_id 是 Product 表的外键。 该表的每一行包含关于一个销售的一些信息。  

编写一个SQL查询,报告2019年春季才售出的产品。即仅在2019-01-01至2019-03-31(含)之间出售的商品。

以 任意顺序 返回结果表。

题目分析

首先分析一下该题目的要求,题干中提供了两张表,一张表为销售表,另一张表为产品表。销售表中的记录可以重复出现,也就是代表我们实际产品的销售时间。而对于问题来说,我们要得到所有仅在某个时间范围内销售的产品。换句话来说,也就是我们要得到所有在时间范围外未销售过的产品。因此我们可以查询时间范围外销售过的产品,并将其作为我们的查询条件。通过对于两张表的查询,在条件语句中关联两张表,利用产品id进行对应。查询条件中增加销售的时间,在时间范围外出现过,然后判断产品id不能出现在该条件子表中。然后直接获取产品表的信息,也就是我们题目目标的答案。至此,解题完毕。

解题答案

select distinct a.product_id, b.product_name
from sales a, product b
where a.product_id = b.product_id
and a.product_id not in (
    select product_id
    from sales 
    where sale_date not between '2019-01-01' and '2019-03-31'
);

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。