高效数据分析所需的3个SQL函数

高效数据分析所需的3个SQL函数

SQL 是关系数据库管理系统使用的一种编程语言。它提供了许多对存储在关系数据库中的数据进行操作的函数和方法。

SQL 不仅仅是一种查询语言,我们也可以使用它来过滤、操作和分析数据。在本文中,我们将介绍 3 个对高效数据分析非常有用的 SQL 函数。

我们将介绍的功能是:

  • Coalesce
  • Case when
  • Row_number

我创建了两个示例表并用模拟数据填充它们,我们先来看看这些表。

(产品表)
(销售表)

这两个表包含了来自两个不同商店的销售和产品数据。

1. Coalesce

考虑我们需要将销售表向左连接到产品表的情况。它们通过产品代码相关联,因此我们根据此列加入表格。

SELECT P.*, S.storecode, s.date, s.salesqty, s.salesrevenue                                                             
FROM products P                                                                                                                
LEFT JOIN sales S                                                                                                                           
ON P.productcode = S.productcode;

并非所有产品在给定日期都有销售。对于这些产品,销售表中的列包含空值(在上面的屏幕截图中为空)。

我们可以使用coalesce函数来处理作为连接表的结果的空值。在本例中,我们可以用零填充销售数量和销售收入列。日期列可以用其他行中的日期填充。

SELECT 
   P.*, 
   S.storecode, 
   coalesce(s.date, '2021-05-10') as date,   
   coalesce(s.salesqty,0) as salesqty,
   coalesce(s.salesrevenue, 0) as salesrevenue 
FROM Products P 
LEFT JOIN Sales S 
ON P.productcode = S.productcode;

空单元格用合并函数中的指定值填充。我已将存储代码保留为空。

2. Case when

当函数允许根据给定条件更新值的情况。它类似于 Python 中的 if-else 语句。

假设我们要从销售表中选择所有列,并根据销售收入创建一个附加列。如果收入高于 5,则此列取值“高”。否则,它会填充“常规”。

我们可以用 case when 函数来完成这个操作,如下所示:

SELECT 
   *, 
   CASE WHEN salesrevenue > 5 THEN 'high' ELSE 'regular' END AS 
   salesgroup 
FROM Sales;

上述查询中的 case when 语句执行以下步骤:

  • 创建一个名为“salesgroup”的列
  • 当销售收入列的值大于5时,给该列赋值“高”
  • 否则(即其他)分配“常规”

3. Row_number

row_number 函数允许根据特定列中的值为行分配排名。我们可以通过结合分区来使其更灵活或更有用。

回忆一下销售表:

假设我们需要根据销售收入分配排名,我们希望对不同的产品组进行单独的排名。因此,水果和蔬菜将在其自身内进行排名。

第一步是从产品表中取出产品组列,然后,我们将使用 row_number 函数。

SELECT 
   S.*, 
   P.productgroup, 
   ROW_NUMBER() OVER(PARTITION BY P.productgroup ORDER BY   
   salesrevenue DESC) AS salesrank 
FROM sales S 
LEFT JOIN products P 
ON S.productcode = P.productcode;

在每一组中,销售收入最高的行被分配第一名。然后,它相应地增加。

结论

SQL 是数据科学生态系统中的强大工具,这绝对是数据科学家必备的技能。我们不仅应该使用 SQL 从数据库中检索数据,还应该使用 SQL 进行数据分析和操作。SQL 能够执行几乎所有可以使用流行的数据分析库(例如 Python pandas 和 R 数据表)完成的操作。

作者:Soner Yildirim

免责声明:凡未注明来源或者来源为网络的信息均转自其它平台,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。网站只负责对文章进行整理、排版、编辑,不承担任何法律责任。若有侵权或异议请联系我们删除,谢谢。

发表评论

您的电子邮箱地址不会被公开。