1070. 產品銷售分析 III
題目
銷售表 Sales:
±------------±------+
| Column Name | Type |
±------------±------+
| sale_id | int |
| product_id | int |
| year | int |
| quantity | int |
| price | int |
±------------±------+
(sale_id, year) 是這張表的主鍵(具有唯一值的列的組合)。
product_id 是產品表的外鍵(reference 列)。
這張表的每一行都表示:編號 product_id 的產品在某一年的銷售額。
請注意,價格是按每單位計的。
產品表 Product:
±-------------±--------+
| Column Name | Type |
±-------------±--------+
| product_id | int |
| product_name | varchar |
±-------------±--------+
product_id 是這張表的主鍵(具有唯一值的列)。
這張表的每一行都標識:每個產品的 id 和 產品名稱。
編寫解決方案,選出每個售出過的產品 第一年 銷售的 產品 id、年份、數量 和 價格。
結果表中的條目可以按 任意順序 排列。
結果格式如下例所示:
示例 1:
輸入:
Sales 表:
±--------±-----------±-----±---------±------+
| sale_id | product_id | year | quantity | price |
±--------±-----------±-----±---------±------+
| 1 | 100 | 2008 | 10 | 5000 |
| 2 | 100 | 2009 | 12 | 5000 |
| 7 | 200 | 2011 | 15 | 9000 |
±--------±-----------±-----±---------±------+
Product 表:
±-----------±-------------+
| product_id | product_name |
±-----------±-------------+
| 100 | Nokia |
| 200 | Apple |
| 300 | Samsung |
±-----------±-------------+
輸出:
±-----------±-----------±---------±------+
| product_id | first_year | quantity | price |
±-----------±-----------±---------±------+
| 100 | 2008 | 10 | 5000 |
| 200 | 2011 | 15 | 9000 |
±-----------±-----------±---------±------+
分析
只用一個表就可以,但是不能直接group by分組,分組后只顯示一條記錄,需要分布查,先找產品id和年份,然后利用id和年份合并查找指定年份的銷售記錄
題解
# 第一步:先查第一年出售過的產品id
-- select product_id, min(year) from sales group by product_id# 第二步:計算價格和數量
select product_id, year first_year, quantity, price from sales
where (product_id, year) in (select product_id, min(year) from sales group by product_id)