0
点赞
收藏
分享

微信扫一扫

【LeetCode1084】销售分析III(基础题,标量子查询)


文章目录

  • ​​一、题目​​
  • ​​二、思路分析​​
  • ​​三、SQL代码​​

一、题目

【LeetCode1084】销售分析III(基础题,标量子查询)_数据库

二、思路分析

首先,需要找到满足2019年第一季度的对应信息,所以要用到where或者having,但是这两个不一样:

  • where约束声明,where不能使用聚合函数,where是在结果返回之前起作用的;
  • having是一个过滤声明,在查询返回结果集后,对查询结果进行的过滤操作;并且在having中可以使用聚合函数(常见的聚合函数,如COUNT、SUM、AVG、MIN、MAX等,这题就可以同时使用​​MAX​​​和​​MIN​​选定满足题目要求的时间范围)。
  • 用GROUP BY分组后可以用HAVING取出想要的组。SQL在使用 HAVING 子句时 SELECT 语句的顺序为:
    FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
  • 注意:其中SELECT的执行顺序在 GROUP BY 子句之后,ORDER BY 子句之前。也就是说,当在ORDER BY中使用别名时,已经知道了SELECT设置的别名存在,但是在GROUP BY中使用别名时还不知道别名的存在,所以不能在ORDER BY中可以使用别名,但是在GROUP BY中不能使用别名。

所以就是标量子查询,按照题目要求,分组后通过​​HAVING​​​选定范围得到​​product_id​​。

三、SQL代码

# Write your MySQL query statement below
SELECT product_id, product_name
FROM product
WHERE product_id in(
SELECT product_id
FROM sales
GROUP BY product_id
HAVING max(sale_date) <= '2019-03-31'
and min(sale_date) >= '2019-01-01'
) # 找到满足条件的所有product_id

当然也可以先直接inner join内联结后直接和刚才一样的一顿操作(分组后HAVING):

# Write your MySQL query statement below
SELECT Product.product_id, product_name
FROM Product
INNER JOIN Sales
WHERE Product.product_id = Sales.product_id
GROUP BY Product.product_id
HAVING max(Sales.sale_date) <= '2019-03-31' and min(Sales.sale_date) >= '2019-01-01';


举报

相关推荐

0 条评论