每个数据工程师都应该知道的 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

图丨来源于网络




相关文章
|
13天前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
24天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
80 10
|
18天前
|
SQL 关系型数据库 MySQL
|
23天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
2月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
2月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
28天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
31 0
|
2月前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
|
2月前
|
SQL 监控 关系型数据库
使用SQL语句查询操作耗时的技巧与方法
在数据库管理和优化过程中,了解SQL查询操作的耗时是至关重要的
|
2月前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
下一篇
无影云桌面