MySQL练手题--周内每天销售情况(困难)

一、准备工作

Create table If Not Exists Orders (order_id int, customer_id int, order_date date, item_id varchar(30), quantity int);
Create table If Not Exists Items (item_id varchar(30), item_name varchar(30), item_category varchar(30));
Truncate table Orders;
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('1', '1', '2020-06-01', '1', '10');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('2', '1', '2020-06-08', '2', '10');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('3', '2', '2020-06-02', '1', '5');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('4', '3', '2020-06-03', '3', '5');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('5', '4', '2020-06-04', '4', '1');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('6', '4', '2020-06-05', '5', '5');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('7', '5', '2020-06-05', '1', '10');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('8', '5', '2020-06-14', '4', '5');
insert into Orders (order_id, customer_id, order_date, item_id, quantity) values ('9', '5', '2020-06-21', '3', '5');
Truncate table Items;
insert into Items (item_id, item_name, item_category) values ('1', 'LC Alg. Book', 'Book');
insert into Items (item_id, item_name, item_category) values ('2', 'LC DB. Book', 'Book');
insert into Items (item_id, item_name, item_category) values ('3', 'LC SmarthPhone', 'Phone');
insert into Items (item_id, item_name, item_category) values ('4', 'LC Phone 2020', 'Phone');
insert into Items (item_id, item_name, item_category) values ('5', 'LC SmartGlass', 'Glasses');
insert into Items (item_id, item_name, item_category) values ('6', 'LC T-Shirt XL', 'T-shirt');

表:Orders

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| order_id      | int     |
| customer_id   | int     |
| order_date    | date    | 
| item_id       | varchar |
| quantity      | int     |
+---------------+---------+
(order_id, item_id) 是该表主键(具有唯一值的列的组合)
该表包含了订单信息
order_date 是id为 item_id 的商品被id为 customer_id 的消费者订购的日期.

表:Items

+---------------------+---------+
| Column Name         | Type    |
+---------------------+---------+
| item_id             | varchar |
| item_name           | varchar |
| item_category       | varchar |
+---------------------+---------+
item_id 是该表主键(具有唯一值的列)
item_name 是商品的名字
item_category 是商品的类别

你是企业主,想要获得分类商品和周内每天的销售报告。

编写解决方案,报告 周内每天 每个商品类别下订购了多少单位。

返回结果表单 按商品类别排序 

结果格式如下例所示。

示例 1:

输入:
Orders 表:
+------------+--------------+-------------+--------------+-------------+
| order_id   | customer_id  | order_date  | item_id      | quantity    |
+------------+--------------+-------------+--------------+-------------+
| 1          | 1            | 2020-06-01  | 1            | 10          |
| 2          | 1            | 2020-06-08  | 2            | 10          |
| 3          | 2            | 2020-06-02  | 1            | 5           |
| 4          | 3            | 2020-06-03  | 3            | 5           |
| 5          | 4            | 2020-06-04  | 4            | 1           |
| 6          | 4            | 2020-06-05  | 5            | 5           |
| 7          | 5            | 2020-06-05  | 1            | 10          |
| 8          | 5            | 2020-06-14  | 4            | 5           |
| 9          | 5            | 2020-06-21  | 3            | 5           |
+------------+--------------+-------------+--------------+-------------+Items 表:
+------------+----------------+---------------+
| item_id    | item_name      | item_category |
+------------+----------------+---------------+
| 1          | LC Alg. Book   | Book          |
| 2          | LC DB. Book    | Book          |
| 3          | LC SmarthPhone | Phone         |
| 4          | LC Phone 2020  | Phone         |
| 5          | LC SmartGlass  | Glasses       |
| 6          | LC T-Shirt XL  | T-Shirt       |
+------------+----------------+---------------+
输出:
+------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
| Category   | Monday    | Tuesday   | Wednesday | Thursday  | Friday    | Saturday  | Sunday    |
+------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
| Book       | 20        | 5         | 0         | 0         | 10        | 0         | 0         |
| Glasses    | 0         | 0         | 0         | 0         | 5         | 0         | 0         |
| Phone      | 0         | 0         | 5         | 1         | 0         | 0         | 10        |
| T-Shirt    | 0         | 0         | 0         | 0         | 0         | 0         | 0         |
+------------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+
解释:
在周一(2020-06-01, 2020-06-08),Book分类(ids: 1, 2)下,总共销售了20个单位(10 + 10)
在周二(2020-06-02),Book分类(ids: 1, 2)下,总共销售了5个单位
在周三(2020-06-03),Phone分类(ids: 3, 4)下,总共销售了5个单位
在周四(2020-06-04),Phone分类(ids: 3, 4)下,总共销售了1个单位
在周五(2020-06-05),Book分类(ids: 1, 2)下,总共销售了10个单位,Glasses分类(ids: 5)下,总共销售了5个单位
在周六, 没有商品销售
在周天(2020-06-14, 2020-06-21),Phone分类(ids: 3, 4)下,总共销售了10个单位(5 + 5)
没有销售 T-Shirt 类别的商品

二、分析

1. 先使用函数将数据中的日期分成周,这个使用函数date+format(date,‘%W’)完成;
selectitem_id,if(date_format(order_date,'%W')= 'Monday',quantity,0) Monday,if(date_format(order_date,'%W')= 'Tuesday',quantity,0) Tuesday,if(date_format(order_date,'%W')= 'Wednesday',quantity,0) Wednesday,if(date_format(order_date,'%W')= 'Thursday',quantity,0)  Thursday,if(date_format(order_date,'%W')= 'Friday', quantity,0)   Friday,if(date_format(order_date,'%W')= 'Saturday',quantity,0)  Saturday,if(date_format(order_date,'%W')= 'Sunday', quantity,0)   Sunday
from Orders;

item_id用来与商品表链接

2.链接上面查出的数据和item表,对商品类型分组聚合周每周内的销售情况,;

with t as (selectitem_id,if(date_format(order_date,'%W')= 'Monday',quantity,0) Monday,if(date_format(order_date,'%W')= 'Tuesday',quantity,0) Tuesday,if(date_format(order_date,'%W')= 'Wednesday',quantity,0) Wednesday,if(date_format(order_date,'%W')= 'Thursday',quantity,0)  Thursday,if(date_format(order_date,'%W')= 'Friday', quantity,0)   Friday,if(date_format(order_date,'%W')= 'Saturday',quantity,0)  Saturday,if(date_format(order_date,'%W')= 'Sunday', quantity,0)   Sundayfrom Orders
)
select item_category Category,sum(Monday) Monday,sum(Tuesday) Tuesday,sum(Wednesday) Wednesday,sum(Thursday) Thursday,sum(Friday) Friday,sum(Saturday) Saturday,sum(Sunday) Sunday
from items i left join t on t.item_id = i.item_id group by item_category

3.在第二步查出的数据中有null值,添加判断条件将null值换为0,另外对商品类型进行排序得出结果;

三、实现

with t as (selectitem_id,if(date_format(order_date,'%W')= 'Monday',quantity,0) Monday,if(date_format(order_date,'%W')= 'Tuesday',quantity,0) Tuesday,if(date_format(order_date,'%W')= 'Wednesday',quantity,0) Wednesday,if(date_format(order_date,'%W')= 'Thursday',quantity,0)  Thursday,if(date_format(order_date,'%W')= 'Friday', quantity,0)   Friday,if(date_format(order_date,'%W')= 'Saturday',quantity,0)  Saturday,if(date_format(order_date,'%W')= 'Sunday', quantity,0)   Sundayfrom Orders
), t1 as (select item_category Category,sum(Monday) Monday,sum(Tuesday) Tuesday,sum(Wednesday) Wednesday,sum(Thursday) Thursday,sum(Friday) Friday,sum(Saturday) Saturday,sum(Sunday) Sunday
from items i left join t on t.item_id = i.item_id group by item_category
)
selectCategory,if(Monday is null,0,Monday) Monday,if(Tuesday is null,0,Tuesday) Tuesday,if(Wednesday is null,0,Wednesday) Wednesday,if(Thursday is null,0,Thursday) Thursday,if(Friday  is null,0,Friday) Friday,if(Saturday is null,0,Saturday) Saturday,if(Sunday is null,0,Sunday) Sunday
from t1 order by Category
;

四、总结

因为输入的是两张表,但题目主要要求的是将商品的周内每天的商品报告,需要对表进行开列,但由于题目给到的是日期,想要转成周内每天需要使用date+format(date,‘%W’)转换,完成之后再连接商品表对商品类型分组,对每个星期几求和,将含有null值的转为0,最后对类型分组,得出最后结果;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147485.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【软件文档】软件项目试运行方案(word实际套用2024)

软件项目试运行方案(Word原件参考) 一、试运行目的 二、试运行的准备 三、试运行时间 四、试运行制度 五、试运行具体内容与要求 软件全套资料部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表&#xff0c…

python画图1

import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] ["SimHei"]# 模拟数据 years [2016, 2017, 2018, 2019, 2020, 2021, 2022] market_size [7950, 8931, 9940, 11205, 12305, 13199, 14980] my_color #3e9df5plt.plot(years, market_s…

《他们的奇妙时光》圆满收官,葛秋谷新型霸总获好评

9月21日,由王枫、张开法执导,周洁琼、葛秋谷领衔主演的奇幻爱情题材都市喜剧《他们的奇妙时光》圆满收官。该剧讲述了意外被游戏角色刑天附体的设计师宋灵灵,为修复游戏漏洞,被迫与能压制刑天的甲方总裁萧然同居,两人在…

局域网设备自动发现常用方法

文章目录 需求实现方法ARP (Address Resolution Protocol)Ping ip的流程抓包如下代码实现 mDNS 对比测试Avahi 介绍Avahi 安装Avahi 使用测试代码 需求 局域网设备自动发现是软件开发中的一个常见且重要的需求,它简化了设备间的协作机制,降低了软件各模…

MySQL内存(Buffer Pool)

Buffer Pool MySQL 的数据存在磁盘,但是不能每次读取数据都从磁盘里去,这样磁盘IO太频繁,存在性能问题。 InnoDB设计了一个缓存池(Buffer Pool),缓冲池在内存中。 默认配置Buffer Pool大小为128MB&#xf…

Trapezoidal Decomposition梯形分解算法(TCD)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言Trapezoidal Decomposition梯形分解算法(TCD)原理(1)第一种原理(2…

DataX实战:从MongoDB到MySQL的数据迁移--修改源码并测试打包

在现代数据驱动的业务环境中,数据迁移和集成是常见的需求。DataX,作为阿里云开源的数据集成工具,提供了强大的数据同步能力,支持多种数据源和目标端。本文将介绍如何使用DataX将数据从MongoDB迁移到MySQL。 环境准备 安装MongoDB…

智慧医院人工智能应用场景 | 智能导诊系统源码

近年来,智能医疗在国内外的发展热度不断提升。图像识别、深度学习、神经网络、大模型、语音等关键技术的突破带来了人工智能技术新一轮的发展。 场景一:智能机器人 医疗机器人是指能够在医疗领域执行特定任务或功能的机器人,包括手术机器人、…

【LLaMa2入门】从零开始训练LLaMa2

目录 1 背景2 搭建环境2.1 硬件配置2.2 搭建虚拟环境2.2.1 创建虚拟环境2.2.2 安装所需的库 3 准备工作3.1 下载GitHub代码3.2 下载模型3.3 数据处理3.3.1 下载数据3.3.2 数据集tokenize预处理 4 训练4.1 修改配置4.2 开始训练4.3 多机多卡训练 5 模型推理5.1 编译5.1.1 安装gc…

Java算法专栏

专栏导读 在当今这个技术日新月异的时代,Java算法作为软件开发的核心,对于提升程序性能和解决复杂问题至关重要。本“Java算法”专栏旨在帮助读者深入理解Java编程语言中的算法原理和应用,通过实战案例和深入分析,使读者能够掌握…

软媒市场新探索:软文媒体自助发布,开启自助发稿新篇章

在繁华喧嚣的软媒市场中,每一个声音都在竭力呼喊,每一个品牌都在奋力展现。而软文,作为一种温柔而坚韧的营销力量,正逐渐崭露头角。特别是软文媒体自助发布平台的出现,更是为企业提供了一个全新的、高效的自助发稿渠道。 软媒市场自助发布平台,正如其名,是一个让企业能够自主发…

【LeetCode】每日一题 2024_9_21 边积分最高的节点(哈希)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:边积分最高的节点 代码与解题思路 func edgeScore(edges []int) (ans int) {// 直接维护哈希最大值即可mp : map[int]int{}for i, v : range edges {mp[v] i// 如果多个节点的 边积分 相…

【数据库】常用数据库简介

目录 🍔 常用的关系型数据库 🍔 Mysql简介 🍔 SQL 简介 SQL语句的分类 SQL 写法 SQL 常用的数据类型 🍔 DDL语句 对数据库的操作 对数据表的操作 🍔 DML语句 插入数据 insert into 修改数据 update 删除数…

Ubuntu下使用 python搭建服务实现从web端远程配置设备网口

1、通过文件配置Ubuntu设备网口 在Ubuntu工控机上,通过文件配置网口(网络接口)可以让网络配置在每次系统启动时自动生效。以下是常见的方法步骤: 1.1 使用 netplan 配置网口(Ubuntu 18.04 及以上版本) 编…

探索微软Copilot Agents:如何通过Wave 2 AI彻底改变工作方式

微软在最近的Copilot Wave 2发布会上,展示了一系列将彻底改变日常工作流程的新AI功能,尤其是 Copilot Agents,它们不仅仅是简单的工具,而是真正的工作助理,可以自动完成任务、提供智能分析并帮助你做出决策。这些新功能…

Day6:反转链表

题目:给你单链表的头节点head,请你反转链表,并返回反转后的链表。 输入:head[1,2,3,4,5] 输出:[5,4,3,2,1] public ListNode reverseList() {if (head null) {return head;}ListNode cur head.next;head.next null…

Python脚本每日自动备份MySQL数据库,无需mysqldump

编写一个Python脚本,每天凌晨3点开始备份 脚本具有以下特点 不需要安装mysql-client,并且Windows Linux都可以使用支持多个数据库连接的备份每个数据库支持多个表备份日志保存下来,方便第二天早上查看备份结果 首先安装需要的库 pip3 ins…

调节 PWM的占空比控制舵机的角度

一、PWM工作原理 让计数器从0数到自动重装载值,不停计数。计数值小于输出比较寄存器时输出一种电平,大于输出比较寄存器时使出另一种电平。 修改定时器时钟源的速度以及预分频器等设置,可以修改计数器计数的速度 再加上修改自动重装载值&…

肺结节检测系统源码分享

肺结节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

python画图|图像背景颜色设置

python画图出来的默认图形背景是白色,有时候并不适合大家表达想要表达的意思。 因此,我们很有必要掌握自己设置图形背景颜色的技巧。 【1】官网教程 首先请各位看官移步官网,看看官网如何设置,下述链接可轻松到达: …