我将使用 SQL 对一个餐厅的销售数据集执行 EDA。在这个分析项目中,我想找出以下问题的答案:
1. 订单总数是多少?
2. 总销售量是多少?
3. 平均上菜时间是多少?
4. 食物的平均评分是多少?
5. 哪个客户订购最多?
6. 哪家餐厅的订单最多?
7. 最受欢迎的美食是什么?
8. 一天中哪个时间点的订单最多?
9. 每个区域有多少客户?
10. 哪个区域的订单最多?
导入数据集,并创建数据库
由于数据集由两个表组成,因此我在数据库中创建了两个单独的表。
数据清洗
这个数据集已经是比较干净的了,所以只需要对它进行一些小改动。
日期列:
订单日期(order date)列的格式为日期/时间。我用 convert 函数 从中提取了时间,在分析过程中会用到。日期都是一样的(发生在 2022 年 1 月 1 日),所以我用 Alter 和 Drop 子句从表中删除了日期列。
检查空值:
确认数据集中是否有空值。
上图所示,数据中没有空值,所以我们可以继续分析流程。
使用聚合函数计算
找出问题1~4 的答案。
连接两个表
第一个表包含订单信息,第二个表包含餐厅信息。我们需要合并这两个表才能进行分析。
使用 join 子句,使用两个表的特定列将其连接在一起。
创建 CTE
为了方便引用我们的合并表,我创建了一个公共表表达式 (CTE)。n/b 使用 CTE 时,必须始终在编写查询之前先运行 CTE 代码。
- 每个区域有多少客户?
为了回答这个问题,我需要对不同的客户进行计数,并按区域对他们进行分组。使用带有 group by 子句的聚合函数 count distinct。
B 区和 D 区的客户数量相等。
- 哪家餐厅的订单最多?
为了回答这个问题,我将订单金额的总和按餐厅名称分组。
Veer餐厅的订单量最高,其次是cave酒店。
- 最受欢迎的美食是什么?
- 一天中哪个时间点的订单最多?
我将订单时间分为上午、下午和晚上,这是使用 case when 语句完成的。出于分析的目的,我将中午 12 点到 17:59 之间的时间归为下午,晚上 18:00 和 23:59,早上 12:00 到 11:59。然后再统计下订单的频率。
下午的订单量最高。这是由于午餐和高峰时间等因素造成的。
- 哪个区域的订单最多?
总结:
在这个实践案例中我使用了各种 SQL 语句,例如基本的 SELECT、WHERE 和 FROM 语句,然后通过使用 JOIN 语句将两个表连接在一起,进行了更高级的操作。还使用子查询创建了连接表的 CTE,并将其与其他查询相结合,以便从数据集中获得结论。
热门跟贴