LeetCode刷题-数据库(MySQL)-1083. Sales Analysis III

1083. Sales Analysis III

一、题目描述

Table: Product

Column Name Type
product_id int
product_name varchar
unit_price int

product_id is the primary key of this table.

Table: Sales

Column Name Type
seller_id int
product_id int
buyer_id int
sale_date date
quantity int
price int

This table has no primary key, it can have repeated rows.
product_id is a foreign key to Product table.

Write an SQL query that reports the products that were only sold in spring 2019. That is, between 2019-01-01 and 2019-03-31 inclusive.

The query result format is in the following example:

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

Result table:

product_id product_name
1 S8

The product with id 1 was only sold in spring 2019 while the other two were sold after.

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sales-analysis-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析

Write an SQL query that reports the products that were only sold in spring 2019. That is, between 2019-01-01 and 2019-03-31 inclusive.
本题要求找出所有只在2019年1月1日-2019年3月31日被售出的产品。需要注意的有以下几点:

  1. 题意中最重要的一点就是“只在2019年1月1日-2019年3月31日被售出”。也就是,该产品所有的销售记录都在此时间段,此外的时间段无销售记录。
  2. 要实现这个目的,对product_id进行GROUP BY,只要要求每个分组中最大的销售时间小于等于"2019-03-31",最小的销售时间大于等于"2019-01-01"即可。
  3. 为了在最后显示出产品的名称,还需要对两表进行内连接JOIN。
  4. 为防止出现重复记录,使用DISTINCT去重。

三、代码实现

SELECT DISTINCT
    s.product_id, p.product_name
FROM
    Sales s
JOIN
    Product p
ON
    s.product_id = p.product_id
GROUP BY
    s.product_id
HAVING
    MAX(sale_date) <= '2019-03-31'
    AND MIN(sale_date) >= '2019-01-01';

你可能感兴趣的:(MySQL)