# Write your MySQL query statement below
1384. 按年度列出销售总额
Product
表:
+---------------+---------+ | Column Name | Type | +---------------+---------+ | product_id | int | | product_name | varchar | +---------------+---------+ product_id 是这张表的主键(具有唯一值的列)。 product_name 是产品的名称。
Sales
表:
+---------------------+---------+ | Column Name | Type | +---------------------+---------+ | product_id | int | | period_start | date | | period_end | date | | average_daily_sales | int | +---------------------+---------+ product_id 是这张表的主键(具有唯一值的列)。 period_start 和 period_end 是该产品销售期的起始日期和结束日期,且这两个日期包含在销售期内。 average_daily_sales 列存储销售期内该产品的日平均销售额。 销售日期范围为2018年到2020年。
编写解决方案,找出每个产品每年的总销售额,并包含 product_id
, product_name
, report_year
以及 total_amount
。
返回结果并按 product_id
和 report_year
排序。
返回结果格式如下例所示。
示例 1:
输入: Product
table: +------------+--------------+ | product_id | product_name | +------------+--------------+ | 1 | LC Phone | | 2 | LC T-Shirt | | 3 | LC Keychain | +------------+--------------+Sales
table: +------------+--------------+-------------+---------------------+ | product_id | period_start | period_end | average_daily_sales | +------------+--------------+-------------+---------------------+ | 1 | 2019-01-25 | 2019-02-28 | 100 | | 2 | 2018-12-01 | 2020-01-01 | 10 | | 3 | 2019-12-01 | 2020-01-31 | 1 | +------------+--------------+-------------+---------------------+ 输出: +------------+--------------+-------------+--------------+ | product_id | product_name | report_year | total_amount | +------------+--------------+-------------+--------------+ | 1 | LC Phone | 2019 | 3500 | | 2 | LC T-Shirt | 2018 | 310 | | 2 | LC T-Shirt | 2019 | 3650 | | 2 | LC T-Shirt | 2020 | 10 | | 3 | LC Keychain | 2019 | 31 | | 3 | LC Keychain | 2020 | 31 | +------------+--------------+-------------+--------------+ 解释: LC Phone 在 2019-01-25 至 2019-02-28 期间销售,该产品销售时间总计35天。销售总额 35*100 = 3500。 LC T-shirt 在 2018-12-01 至 2020-01-01 期间销售,该产品在2018年、2019年、2020年的销售时间分别是31天、365天、1天,2018年、2019年、2020年的销售总额分别是31*10=310、365*10=3650、1*10=10。 LC Keychain 在 2019-12-01 至 2020-01-31 期间销售,该产品在2019年、2020年的销售时间分别是:31天、31天,2019年、2020年的销售总额分别是31*1=31、31*1=31。
原站题解
mysql 解法, 执行用时: 297 ms, 内存消耗: 0 B, 提交时间: 2023-10-15 22:58:03
# Write your MySQL query statement below WITH temp1 AS ( SELECT 2018 AS year UNION SELECT 2019 AS year UNION SELECT 2020 AS year ),temp2 AS ( SELECT product_id,average_daily_sales,year, CASE WHEN YEAR(period_start) = year AND YEAR(period_end) = year THEN DAYOFYEAR(period_end) - DAYOFYEAR(period_start) + 1 WHEN YEAR(period_start) < year AND YEAR(period_end) > year THEN IF(year = 2020,366,365) WHEN YEAR(period_start) = year THEN IF(year = 2020,367 - DAYOFYEAR(period_start),366 - DAYOFYEAR(period_start)) WHEN YEAR(period_end) = year THEN DAYOFYEAR(period_end) END AS date FROM Sales JOIN temp1 ON year BETWEEN YEAR(period_start) AND YEAR(period_end) ) SELECT #执行用时446ms,在所有MySQL提交中击败81.73%的用户 product_id,product_name,CAST(year AS CHAR) AS report_year,date * average_daily_sales AS total_amount FROM #内存消耗0B,在所有MySQL提交中击败100.00%的用户 temp2 LEFT JOIN Product USING(product_id) ORDER BY product_id,report_year #2022.7.13