文章目錄
- 一、題目
- 二、思路分析
- 三、SQL代碼
一、題目
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SN4ETNxMmZ3IGN3IGO1UjNzYzXxUzMyIDM1AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
二、思路分析
首先,需要找到滿足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';