码迷,mamicode.com
首页 > 数据库 > 详细

LeetCode SQL [Hard] 1384. 按年度列出销售总额

时间:2020-04-12 08:08:56      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:tab   one   png   函数   style   make   技术   length   自增   

建表语句与原题:

Create table If Not Exists Product (product_id int, product_name varchar(30))
Create table If Not Exists Sales (product_id varchar(30), period_start date, period_end date, average_daily_sales int)
Truncate table Product
insert into Product (product_id, product_name) values (1, LC Phone )
insert into Product (product_id, product_name) values (2, LC T-Shirt)
insert into Product (product_id, product_name) values (3, LC Keychain)
Truncate table Sales
insert into Sales (product_id, period_start, period_end, average_daily_sales) values (1, 2019-01-25, 2019-02-28, 100)
insert into Sales (product_id, period_start, period_end, average_daily_sales) values (2, 2018-12-01, 2020-01-01, 10)
insert into Sales (product_id, period_start, period_end, average_daily_sales) values (3, 2019-12-01, 2020-01-31, 1)

技术图片

 

 

技术图片

 

 

 技术图片

 

 本题知识点(MySQL):

1.时间函数

时间函数用的不多,用到查就好,本题里需要时间函数实现一年里的第一天,最后一天,以及两个日期之间相差的天数。

一年里的第一天:makedate(yy,days) ,yy 用当前年份,days代表一年的第几天。

一年的最后一天:CONCAT(yy,‘-12-31‘) ,用字符串拼接实现。

两个日期之间的时间差 : datediff(day1,day2)

2.一行转多行

先看一个例子:

SELECT
    SUBSTRING_INDEX( SUBSTRING_INDEX(A,B,C,D,E, ,, h.help_topic_id + 1), ,,- 1 ) AS chars
FROM
    mysql.help_topic AS h 
WHERE
    h.help_topic_id < ( LENGTH(A,B,C,D,E) - LENGTH( REPLACE (A,B,C,D,E, ,, ‘‘ ) ) + 1 );
上面的SQL查出来的结果如下

技术图片

mysql.help_topic 是mysql中自带的一张表,h.help_topic_id是自增id,从0开始。

理解了这个例子后本题就可以下手了。

MySQL版本题解:
SELECT 
  sales.`product_id`,
  product.`product_name`,
  help_topic_id + YEAR(sales.`period_start`) AS report_year,
  DATEDIFF(
    IF(
      help_topic_id + YEAR(sales.`period_start`) < YEAR(sales.`period_end`),
      CONCAT(
        help_topic_id + YEAR(sales.`period_start`),
        -12-31
      ),
      sales.`period_end`
    ),
    IF(
      help_topic_id = 0,
      sales.`period_start`,
      MAKEDATE(
        YEAR(sales.`period_start`) + help_topic_id,
        1
      )
    )
  ) * sales.`average_daily_sales` + sales.`average_daily_sales` AS total_amount 
FROM
  mysql.help_topic AS h,
  sales,
  Product
WHERE h.help_topic_id < (
    YEAR(sales.`period_end`) - YEAR(sales.`period_start`) + 1
  ) AND Product.`product_id` = sales.`product_id`;

 

 

LeetCode SQL [Hard] 1384. 按年度列出销售总额

标签:tab   one   png   函数   style   make   技术   length   自增   

原文地址:https://www.cnblogs.com/onePunchCoder/p/12683519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!