图片作者
在数据世界中,SQL 仍然是与数据库交互的通用语言。
时至今日,它仍然是处理数据最常用的语言之一,并且仍然被认为是任何优秀数据专业人员的必备语言。
然而,任何使用过复杂 SQL 查询的人都知道它们很快就会变成笨重的野兽——难以阅读、维护或重用。
这就是为什么今天仅仅了解 SQL 还不够,我们需要善于设计查询。这实际上是一种艺术。
这就是通用表表达式 (CTE) 发挥作用的地方,它将查询编写的艺术转变为更加结构化且易于理解的技术。
因此,让我们一起探索如何编写可读且可重用的查询代码。
如果您想知道什么是 CTE,那么您就读对了文章。
公共表表达式 (CTE) 是在单个 SQL 语句的执行范围内定义的临时结果集。
它们是可以在单个查询中多次引用的时态表,通常用于简化复杂的联接和子查询,最终目标是提高 SQL 代码的可读性和组织性。
因此,它们是将复杂查询分解为更简单部分的强大工具。
以下是您应该考虑使用 CTE 的原因:
- 模块化: 您可以将复杂的逻辑分解为可读的块。
- 可读性: 它使理解 SQL 查询的流程变得更容易。
- 可重用性: CTE 可以在单个查询中多次引用,从而避免重复。
神奇之处始于WITH 子句,该子句位于主查询之前,并使用别名定义不同的时态表(CTE)。
因此,我们总是需要使用“WITH”命令来开始查询,以开始定义自己的 CTE。通过使用 CTE,我们可以将任何复杂的 SQL 查询分解为:
– 计算相关变量的小型时态表。
– 最终表仅采用我们想要的那些变量作为输出。
这正是我们在任何代码中想要的模块化方法!
图片作者
因此,在查询中使用 CTE 使我们能够:
– 执行一次临时表并多次引用它。
– 提高可读性并简化复杂逻辑。
– 促进代码可重用性和模块化设计。
为了更好地理解这一点,我们可以举一个巴塞罗那 Airbnb 房源的实际例子。
想象一下,我们想要分析街区列表的表现,并将其与城市的整体表现进行比较。您需要收集有关社区、单个公寓、房东和价格的信息。
为了举例说明这一点,我们将使用 Airbnb内部 巴塞罗那表,如下所示:
一种幼稚的方法可能会导致您创建嵌套子查询,这很快就会成为维护噩梦,如下所示:
作者代码
相反,我们可以利用 CTE 将查询划分为逻辑部分,每个部分定义拼图的一部分。
- 邻里数据: 创建 CTE 以按邻域汇总数据。
- 公寓和房东信息: 定义 CTE 以获取有关公寓和房东的详细信息。
- 全市指标: 另一个收集城市级统计数据以进行比较的 CTE。
- 最后组装: 将 CTE 合并到最终的 SELECT 语句中以紧密地呈现数据。
图片作者
我们最终会得到以下查询:
作者代码
通过使用 CTE,我们将可能巨大的单个查询转变为一组有组织的数据模块。这种模块化方法使 SQL 代码更加直观并且能够适应变化。
如果出现新需求,您可以调整或添加 CTE,而无需彻底修改整个查询。
建立 CTE 后,您可以重复使用它们来执行比较分析。例如,如果您想将社区数据与全市指标进行比较,您可以在一系列 JOIN 操作中引用您的 CTE。
这不仅节省时间,还可以保持代码高效,因为您不必重复相同的查询两次!
CTE 证明了“小结构在编程中大有帮助”这一原则。通过采用 CTE,您可以编写更清晰、更易于维护且可重用的 SQL 查询。
它简化了查询开发过程,并使与其他人交流复杂的数据检索逻辑变得更加容易。
请记住,下次当您发现自己要开始编写一个多连接、嵌套子查询的怪物时,请考虑使用 CTE 将其分解。
未来的你以及任何可能阅读你的代码的人都会感谢你。
约瑟夫·费雷尔 是来自巴塞罗那的分析工程师。 他毕业于物理工程专业,目前从事应用于人类移动的数据科学领域。 他是一名专注于数据科学和技术的兼职内容创作者。 你可以联系他 LinkedIn, Twitter or 中.
- SEO 支持的内容和 PR 分发。 今天得到放大。
- PlatoData.Network 垂直生成人工智能。 赋予自己力量。 访问这里。
- 柏拉图爱流。 Web3 智能。 知识放大。 访问这里。
- 柏拉图ESG。 碳, 清洁科技, 能源, 环境, 太阳能, 废物管理。 访问这里。
- 柏拉图健康。 生物技术和临床试验情报。 访问这里。
- Sumber: https://www.kdnuggets.com/sql-simplified-crafting-modular-and-understandable-queries-with-ctes?utm_source=rss&utm_medium=rss&utm_campaign=sql-simplified-crafting-modular-and-understandable-queries-with-ctes
- :具有
- :是
- :不是
- :在哪里
- $UP
- a
- 关于
- 通
- 加
- 调整
- 采用
- 驳
- Airbnb的
- 允许
- 还
- 时刻
- an
- 分析
- 分析
- 分析
- 和
- 另一个
- 任何
- 任何人
- 公寓
- 应用的
- 的途径
- 平易近人的
- 保健
- 艺术
- 刊文
- AS
- 组装
- At
- 避免
- 巴塞罗那
- BE
- 成为
- 更好
- 午休
- 破坏
- 但是
- by
- CAN
- 更改
- 更清晰
- 码
- 结合
- 如何
- 相当常见
- 通信
- 比较
- 对照
- 复杂
- 计算
- 考虑
- 考虑
- CONTACT
- 内容
- 手艺
- 创建信息图
- 创造者
- 目前
- data
- 数据科学
- 数据库
- 处理
- 定义
- 定义
- 定义
- 设计
- 详情
- 研发支持
- 不同
- 通过各种方式找到
- 向下
- 更容易
- 高效
- 其他
- 从事
- 出现
- 结束
- 工程师
- 工程师
- 更多
- 整个
- 成熟
- 例子
- 执行
- 执行
- 表达
- 表达式
- 部分
- 最后
- 找到最适合您的地方
- 流
- 重点
- 以下
- 如下
- 针对
- 止
- 未来
- 收集
- 目标
- GOES
- 非常好
- 有
- he
- 他
- 主持人
- 为了
- 创新中心
- How To
- HTTP
- HTTPS
- 人
- if
- 改善
- in
- 增加
- 个人
- 信息
- 例
- 互动
- 成
- 直观的
- IT
- 加入
- 加入
- JPG
- 掘金队
- 知道
- 知道
- 语言
- 铅
- 喜欢
- 房源
- 小
- 逻辑
- 合乎逻辑的
- 长
- LOOKS
- 魔法
- 主要
- 保持
- 可维护的
- 保养
- 制作
- 许多
- 指标
- 可能
- 流动性
- 模块化
- 模块
- 更多
- 最先进的
- 多
- 一定有
- 需求
- 全新
- 下页
- of
- on
- 一旦
- 一
- 仅由
- 运营
- or
- 秩序
- 组织
- 举办
- 其它
- 我们的
- 输出
- 产量
- 最划算
- 己
- 部分
- 演出
- 性能
- 物理
- 片
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 可能
- 强大
- 实用
- 恰恰
- 当下
- 价格
- 原理
- 过程
- 所以专业
- 代码编程
- 促进
- 困扰
- 查询
- 很快
- 阅读
- 参考
- 引用
- 有关
- 重复
- 岗位要求
- 导致
- 恢复
- 可重复使用
- 重用
- 右
- 同
- 科学
- 科学与技术
- 范围
- 选择
- 系列
- 集
- 应该
- 简单
- 简
- 简化
- 单
- 小
- SQL
- 看台
- 开始
- 个人陈述
- 统计
- 仍
- 流线
- 结构体
- 结构化
- 总结
- 表
- 采取
- 需要
- 专业技术
- 临时
- 遗嘱
- 感谢
- 这
- 世界
- 他们
- 他们
- Free Introduction
- 那些
- 次
- 时
- 至
- 今晚
- 一起
- 工具
- 转型
- 转
- 类型
- 一般
- 全功能包
- 理解
- 可理解的
- 理解
- us
- 使用
- 用过的
- 运用
- 利用
- 想
- 方法..
- we
- 什么是
- 什么是
- 这
- WHO
- 为什么
- 将
- 中
- 也完全不需要
- 想知道
- 工作
- 加工
- 世界
- 将
- 写
- 写作
- 您
- 您一站式解决方案
- 你自己
- 和风网