我将使用 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,并将其与其他查询相结合,以便从数据集中获得结论。