SQL从优秀到卓越:第1部分

  用CTES,你可以走远。

  泰勒布朗洛

  5月5·5分钟阅读

  上周我看到了一条让我思考的推文:如果可以的话,我会回去的SQL’黑客’,并迟早教我自己?这个简单的问题很快就变成了一系列文章,这些文章阐述了一些我最喜欢的方法,解释了他们为什么有用的,以及如何使用它们。我选择的主题是:

  第1部分:通用表格表达式

  第2部分:关于这些日期

  第3部分:另一个Join

  第4部分:窗口函数

  有一个提出不受欢迎的SQL方法,对您带来了差异吗?给我发表评论!

  好的,第1部分:CTE!

  什么是CTE?

  通用表格表达式(CTE)是单个查询中可用的临时表。

  他们使用以下语法:

  WITH cte_name AS

  (SELECT ... FROM ... )

  SELECT * FROM cte_name;

  为什么他们很重要

  展示为什么这个看似良性的查询结构是如此有益,让我们来看看一个例子。说我有两个表:

  比赛:网球比赛统计数据选手:网球选手元数据的文件

  > Tennis Match Preview

  

  > Tennis Players Preview

  我想找到每个玩家的年龄,当他们赢得他们的第一个大满贯决赛时。

  为此,我需要找到每个玩家首次赢得自考匹配表的大满贯,然后使用玩家表将该日期与其出生日期进行比较。

  这个问题有很多方法,但它们在很大程度上用了两种方法:

  

  > Image by Author

  虽然两种方法的长度相似,但应用的逻辑是相同的,而CTE方法存在一些明显的优势:

  1.理解更容易。

  如果回答这个问题的第1步涉及每次玩家首次赢得大满贯,那么这不是你读过的第一件事吗?

  使用子查询,执行顺序几乎不可能辨别,因为您被迫扫描最低级别的缩进并向上方工作,直到您终于到达第一行。

  CTES让您以简单地有意义的方式构建您的查询,不仅仅是您在写查询时不仅受益,而且还有其他人被迫尝试解释它。

  2.更快的迭代。

  如果我想知道最年轻的球员,竟然怎么办?或者最古老的球员在任何锦标赛中赢得最终决赛,而不仅仅是大满贯?

  我可以轻松调整我的CTE Grand_slam_matches来回答这些问题,而无需担心我正在掌握右侧的更改。

  如此大量的数据分析涉及这些快速迭代调整到我们的查询,因为我们与数据有“对话”。当我们有复杂的疑问时,这些“调整”可以膨胀到痛苦的任务;CTES为您提供一个常识结构,以便快速完成这些快速调整。

  3.值得信赖的验证

  像每个良好的分析师一样,我将始终验证我的结果(),CTEs使CTE更加简单。由于我可以检查每个CTE,我可以快速识别任何验证错误的来源,并解决单个逻辑步骤,而不是处理临时的子查询。

  如果你保留得分,我认为这是对CTES的40人。

  CTE POWER-UP

  CTES在个人查询级别的好处是众多,但如果我们可以采取CTE的好处,并且在我们的整个分析中应用它,而不仅仅是一个查询?

  随着SQL笔记本电脑最近的进步,我们可以在将CTE构造应用到更大的比例中时,可以开始查看可能发生的可能性。

  在这些笔记本电脑中,每个单元格表示CTE,并且可以通过任何其他小区引用这些单元中的每一个,实际上,创建CTE的整个连接的图形。

  

  > Our analysis done in Count.co

  或作为连接图:

  

  > Our analysis represented as a connected graph. Image by Author.

  这使你能做什么可能令人惊讶。您仍然享受单个CTE的好处,例如在逻辑流中构建分析,使快速迭代和验证检查,但另外,它允许查询和文本的参数化。

  累积效果更像是一个应用程序而不是查询。

  如果我们想扩展我们的分析,包括更多疑问,我们可以将更多的单元格连锁在一起。如果我们想要包含全局过滤器,我们可以将那些添加到笔记本并将那些与其他单元格中的链接。

  

  > Image by Author.

  CTE最佳实践使用唯一和有意义的列和CTE名称(请使用’CTE’作为…)试着让他们“一般”,这样你就可以轻松回去并调整逻辑进一步阅读PostgreSQL,BigQuery,Snowflake,Redshift,MySQL的CTE文档如何在SQL中使用CTES

  尽快留出第2部分!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值