每个数据工程师都应该知道的 6 个 SQL 查询

简介: 每个数据工程师都应该知道的 6 个 SQL 查询

无论您是刚开始工程生涯的初学者,还是经验丰富的数据工程师或数据分析师,都必须了解高级 SQL 语法。

随着数据呈指数级增长,超快速地分析这些数据变得更加重要。

此图中的单位是 zettabytes。


1 ZB = 1 trillion GB

人们可能会说 SQL 已经死了,但现实是目前没有系统可以替代它。有许多非常强大的 NoSQL 存储可以很好地完成他们的工作,以低成本支持大规模横向扩展。然而,它们并没有取代基于 SQL 的高质量存储——它们是对它们的补充。SQL 的 ACID 属性使其成为一种相对自然地对数据建模的高度可靠的方法。

作为一名数据工程师,我使用 SQL 已经有一段时间了,我知道更快地编写复杂查询的重要性。所以,这里有一些高级 SQL 语法肯定会派上用场。

对于以下示例,我使用了下表内容:



一、总计

您经常会遇到必须从表中计算运行总计的情况。

运行总计是指在该特定列中的下一个单元格之前,所有单元格中的值的总和。

这个简单的查询案例可以做到这一点。

SELECT id,month
 , Amount
 , SUM(Amount) OVER (ORDER BY id) as total_sum
FROM bill


输出如下


二、常用的表达式

通用表表达式或简称 CTE 用于简化复杂连接和子查询的可读性。

它基本上是一个临时命名的结果集,你可以在内部引用SELECTINSERTUPDATE,或DELETE语句。

考虑这个简单的查询,

SELECT *
FROM bill
WHERE id in 
  (SELECT DISTINCT id 
   FROM id 
   WHERE country = "US"
   AND status = "Y"
  )

现在想象一下,如果我们在后续查询中多次使用这个子查询。如果我们可以将它用作临时表会不会更容易?CTW 解决了这个问题。

WITH idtempp as (
  SELECT id as id
  FROM id 
  WHERE country = "US"
  AND status = "Y"
)
SELECT *
FROM bill
WHERE id in (SELECT id from idtempp)

这是一个小例子,但这通常对于更大和复杂的子查询非常有用。

三、对数据进行排名

SELECT 
  id,
  Amount,
  RANK() OVER (ORDER BY Amount desc)
FROM bill

在下面的查询中,我根据数量列对数据集进行了排名。

您还可以使用DENSE_RANK()which ,类似于RANK(),除了如果两行具有相同的值它不会跳过后续排名。

四、添加小计

同样,对于数据工程师和分析师来说,这是一个非常重要的查询。在我作为业务/数据分析师的 10 年职业生涯中,我使用此查询进行了大量分析。拥有小计可帮助您从总计的角度看待数据。

它是一个GROUP BY子句的扩展,能够将小计和总计添加到您的数据中。

SELECT  
  Type,
  id,
  SUM (Amount) AS total_amount
FROM bill
GROUP BY Type,id WITH ROLLUP

注意:上面的查询是在 MySQL 中的。其他数据库系统的汇总语法可能会有所不同。

在上面的查询中,type 和 id 都为 null 的行是总数。无论 id 列如何,都有小计。这由第 4 行和倒数第二行表示。


五、临时函数

临时函数允许您轻松修改数据,而无需编写大量 case 语句。

在下面的示例中,临时函数用于将类型转换为性别。这可以在查询中使用 case 语句内联来完成,但阅读起来会很混乱。

CREATE TEMPORARY FUNCTION get_gender(type varchar) AS (
   CASE WHEN type = "M" THEN "male"
        WHEN type = "F" THEN "female"
        ELSE "n/a"
   END
)
SELECT 
  name,
  get_gender(Type) as gender
FROM bill


六、方差和标准差

对于数据科学家和分析师来说,获得方差和标准差的能力至关重要。值得庆幸的是,有一些函数可以获取这些值。

VARIANCEVAR_POPVAR_SAMP是集合函数即它们组的数据。这些用于分别确定一组数据的方差、组方差和样本方差。

SELECT 
  VARIANCE(amount) AS var_amount,
  VAR_POP(amount) AS pop_amount,
  VAR_SAMP(amount) AS samp_amount,
  STDDEV_SAMP(amount) as stddev_amount,
  STDDEV_POP(amount) as stddev_amount,
FROM bill

VAR_POP: 样本方差

VAR_SAMP: 总体方差

STDDEV_SAMP: 样本标准差

STDDEV_POP: 总体标准差

这些是我在数据工程生涯中经常使用的一些顶级 SQL 命令。这些对于解决许多业务问题非常方便。统计数据显示,超过 60%的组织使用 SQL 工具生态系统,包括从 Excel 和 Tableau 到 SparkSQL 的任何内容。考虑到SQL语言的古老性,这些成就是非常值得称道的。

所以,如果你是一名数据工程师,我相信你会发现这些命令很有用。


文丨Soundhearer

图丨来源于网络




相关文章
|
1天前
|
SQL 关系型数据库 MySQL
|
2天前
|
SQL 数据库
Sql中如何添加数据
Sql中如何添加数据
5 0
|
2天前
|
SQL 前端开发
基于jeecgboot复杂sql查询的列表自定义列实现
基于jeecgboot复杂sql查询的列表自定义列实现
|
6天前
|
SQL 数据库
SQL数据库基础语法-查询语句
SQL数据库基础语法-查询语句
|
6天前
|
SQL API 数据库
在Python中获取筛选后的SQL数据行数
在Python中获取筛选后的SQL数据行数
17 1
|
6天前
T-sql 高级查询( 5*函数 联接 分组 子查询)
T-sql 高级查询( 5*函数 联接 分组 子查询)
|
6天前
|
机器学习/深度学习
T-sql 各种查询命令
T-sql 各种查询命令
|
6天前
|
SQL 分布式计算 数据可视化
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
数据分享|Python、Spark SQL、MapReduce决策树、回归对车祸发生率影响因素可视化分析
|
12天前
|
SQL 机器学习/深度学习 数据采集
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
数据分享|SQL Server、Visual Studio、tableau对信贷风险数据ETL分析、数据立方体构建可视化
|
12天前
|
SQL 关系型数据库 数据库
SQL 42501: Postgresql查询中的权限不足错误
SQL 42501: Postgresql查询中的权限不足错误