天天看點

【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中不能使用别名。

三、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      
# 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';