原题说明
Table: Sales
+————-+——-+
| Column Name | Type |
+————-+——-+
| sale_id | int |
| product_id | int |
| year | int |
| quantity | int |
| price | int |
+————-+——-+
sale_id is the primary key of this table.
product_id is a foreign key toProduct
table.
Note that the price is per unit.
Table: Product
+————–+———+
| Column Name | Type |
+————–+———+
| product_id | int |
| product_name | varchar |
+————–+———+
product_id is the primary key of this table.
Write an SQL query that selects the product id, year, quantity, and price for the first year of every product sold.
The query result format is in the following example:
Sales
table:
+———+————+——+———-+——-+
| sale_id | product_id | year | quantity | price |
+———+————+——+———-+——-+
| 1 | 100 | 2008 | 10 | 5000 |
| 2 | 100 | 2009 | 12 | 5000 |
| 7 | 200 | 2011 | 15 | 9000 |
+———+————+——+———-+——-+Product table:
+————+————–+
| product_id | product_name |
+————+————–+
| 100 | Nokia |
| 200 | Apple |
| 300 | Samsung |
+————+————–+Result table:
+————+————+———-+——-+
| product_id | first_year | quantity | price |
+————+————+———-+——-+
| 100 | 2008 | 10 | 5000 |
| 200 | 2011 | 15 | 9000 |
+————+————+———-+——-+
解题思路
我们需要按照年份和产品id
分组,找出年份最小的。
要找到每个商品第一次销售的年份,我们需要应用MIN
函数和group by
,产生一个新的表单。 然后用in
进行联结即可。
示例代码 (mysql)
1 | select product_id, S.year as `first_year`, quantity, price |
视频讲解
我们在Youtube上更新了视频讲解,欢迎关注!