LeetCode:Database 41.产品销售分析 III

要求:编写一个 SQL 查询,选出每个销售产品的第一年的产品 id、年份、数量和价格。

销售表 Sales的结构:

+-------------+-------+
| Column Name | Type  |
+-------------+-------+
| sale_id     | int   |
| product_id  | int   |
| year        | int   |
| quantity    | int   |
| price       | int   |
+-------------+-------+
sale_id 是此表的主键。
product_id 是产品表的外键。
请注意,价格是按每单位计的。

产品表 Product的结构:

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| product_id   | int     |
| product_name | varchar |
+--------------+---------+
product_id 是此表的主键。

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      |
+------------+--------------+

Result Table:

+------------+------------+----------+-------+
| product_id | first_year | quantity | price |
+------------+------------+----------+-------+ 
| 100        | 2008       | 10       | 5000  |
| 200        | 2011       | 15       | 9000  |
+------------+------------+----------+-------+

分析:
1.要求求出每个产品第一年的产品 id、年份、数量和价格,因此需要以产品id进行分组,通过使用窗口函数对年份进行升序排序
2.取得序号为1就是最终结果,同时需要考虑一年内数量和价格会发生变化,因此使用rank() over()函数作为开窗函数

SQL语句:

select product_id,year as first_year,quantity,price 
from
(select sale_id,product_id,year,quantity,price,
rank() over(partition by product_id order by year asc) as r
from sales)a 
where r=1;

你可能感兴趣的:(LeetCode,mysql)