1384 按年度列出销售总额

SQL架构

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

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 列存储销售期内该产品的日平均销售额。

编写一段 SQL 查询每个产品每年的总销售额,并包含 product_id, product_name 以及 report_year 等信息。

销售年份的日期介于 2018 年到 2020 年之间。你返回的结果需要按 product_id 和 report_year 排序。

查询结果格式如下例所示:

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

Result table:
+------------+--------------+-------------+--------------+
| 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。

解题

-- 1、列名区分大小写
-- 2、product_id要返回字符串,sales表的product_id好像是字符串类型的,和题目描述不一样
-- 3、report_year要返回字符串,所以不能用year(),只能用date_format()
-- 4、最后product_id排序要根据字典序,而不是数字顺序,这个真的违反一般习惯

selects.product_id,product_name,date_format( bound, '%y' ) report_year,(datediff (if( bound < period_end, bound, period_end ),if( makedate( year ( bound ), 1 ) > period_start, makedate( year ( bound ), 1 ), period_start ) ) + 1 ) * average_daily_sales total_amount
fromproduct_1384 pjoin ( select '2018-12-31' bound union all select '2019-12-31' bound union all select '2020-12-31' bound ) boundsjoin sales_1384 s on p.product_id = s.product_id and year ( bound ) between year ( period_start ) and year ( period_end )
order bys.product_id,report_year;

Leetcode力扣 MySQL数据库 1384 按年度列出销售总额相关推荐

  1. Leetcode力扣 MySQL数据库 1264 页面推荐

    1264 页面推荐 SQL架构 Create table If Not Exists Friendship_1264 (user1_id int, user2_id int); Create tabl ...

  2. Leetcode力扣 MySQL数据库 1468 计算税后工资

    1468 计算税后工资 SQL架构 Create table If Not Exists Salaries_1468 (company_id int, employee_id int, employe ...

  3. Leetcode力扣 MySQL数据库 574 当选者

    574 当选者 SQL架构 Create table If Not Exists Candidate_574 (id int, Name varchar(255)); Create table If ...

  4. LeetCode MySQL 1384. 按年度列出销售总额

    文章目录 1. 题目 2. 解题 1. 题目 Product 表: +---------------+---------+ | Column Name | Type | +-------------- ...

  5. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  6. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  7. 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java

    <LeetCode力扣练习>第96题 不同的二叉搜索树 Java 一.资源 题目: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回 ...

  8. 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java

    <LeetCode力扣练习>剑指 Offer 28. 对称的二叉树 Java 一.资源 题目: 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的 ...

  9. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  10. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java

    <LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...

最新文章

  1. 布线须知:机柜在数据中心机房的三个新用途
  2. 送给 Java 程序员的 Spring 学习指南
  3. HDU 4358 Boring Counting ★★(2012 Multi-University Training Contest 6)
  4. HTML5关于上传API的一些使用(上)
  5. kafka 消费者API操作入门
  6. vue.js 学习笔记3——TypeScript
  7. 【Redis学习笔记】Redis特性
  8. 2021年Delphi第26届应用软件开发展示挑战赛的获胜者名单
  9. 老机器上安装了kubuntu先尝试安装Manjaro但是鼠标按键无法使用彻底解决办法
  10. 第二讲:PN结与二极管的特性
  11. compositionAPI
  12. 2021年春季 PAT乙级
  13. 将二维数组中最大值的 行和列的下标打印出来
  14. 华为月薪11万招前端工程师,看到要求我傻眼了!
  15. 学计算机语言从何开始,小孩学编程从哪开始
  16. 计算机无法检测更新失败怎么办,Windows更新错误解决方案
  17. 网络传真技术的现状和发展
  18. 福州市仓山区融丰锦秀山庄别墅设计
  19. 源码安装ROS Melodic Python3 指南 (转) + 安装记录
  20. 美图2018校招前端笔试编程题数组去重

热门文章

  1. 完全背包问题(Java)
  2. 服务器进pe iso安装系统教程,iso系统怎么安装( pe怎么安装iso原版镜像)
  3. Matlab中sqrt函数的用法
  4. UE4_Shader Compile 停在某一帧或者新建材质出现卡死
  5. 樊登读书搞定读后感_樊登读书人生定位读后感
  6. zigbeelibrary.jar的使用
  7. python isupper_Python isupper()函数判断字符串字符是否都为大写形式
  8. 特稿:成都,一座“吃饱了撑的”城市
  9. 基础概念 | 公约数、公倍数、互质数
  10. 云计算与大数据——数据挖掘常用算法