本文概述
- TEMP表
- 嵌套的FROM语句
- WITH语句
- 总结
TEMP表你可以创建一个临时表, 该表对于当前的SQL会话存在, 只能由你自己访问, 并且在断开连接时会消失。这对于你需要多次引用的长计算非常有用。语法很简单:
SELECT <
query goes here>
INTO TEMP <
name of the temporary table>
FROM <
rest of query goes here>
【SQL如何增强你的子查询()】TEMP表的最大问题是它们需要你运行多个命令。如果你正在使用Looker或Tableau等仪表板软件, 则TEMP表可能无法正常工作。
嵌套的FROM语句通常, 我们使用FROM语句指示数据将来自哪个表。但是, 它们也可以从嵌套在某些括号内的查询中进行选择。考虑这个例子, 我们在构建每个用户的平均购买金额的直方图。首先, 我们需要计算每个user_id的平均购买金额:
SELECT user_id, ROUND(AVG(purchase)) as avg_purchaseFROM user_purchaseGROUP BY 1;
我们可以接受此查询并将其放在FROM语句中:
SELECT avg_purchase, COUNT(user_id) as num_customersFROM (SELECT user_id, ROUND(AVG(purchase)) as avg_purchaseFROM user_purchaseGROUP BY 1 ) as subquery1GROUP BY 1;
突出显示的查询将首先运行, 并且结果将由外部查询聚合。通过给子查询起别名(在本例中为subquery1), 你可以做复杂的事情, 例如在联接中引用它。
嵌套FROM语句的最大问题是它们很难阅读。特别是, 如果你稍后要回头参考代码, 或者尝试与他人共享代码, 则很难看到你的想法。一旦嵌套了多个FROM, 就几乎不可能弄清楚计算的作用。
WITH语句WITH语句与FROM语句类似, 但有一个主要区别:它们是顺序编写的, 因此更容易理解创建最终查询的步骤。考虑我们之前的查询, 该查询使用WITH进行了重写:
WITH subquery1 AS (SELECT user_id, ROUND(AVG(purchase)) as avg_purchaseFROM user_purchaseGROUP BY 1 )SELECT avg_purchase, COUNT(user_id) as num_customersFROM subquery1GROUP BY 1;
在主查询之前, 我们可以具有任意数量的WITH语句。我们只用逗号分隔每个:
WITH subquery1 AS (... ), subquery2 AS (... ), subquery3 AS (... )SELECT <
final query>
FROM subquery3;
许多数据分析人员和数据科学家更喜欢WITH语句而不是嵌套FROM语句, 因为第三方可以更轻松地查看查询并遵循原始编码器的逻辑。
总结无论你选择使用TEMP表, 嵌套FROM语句还是顺序WITH语句, 多步查询都将为你提供对大数据集的更丰富, 更可行的见解。
如果你想了解有关SQL的更多信息, 请参加srcmini的PostgreSQL中的联接数据课程。
推荐阅读
- 使用Tableau的电子表格
- R中的数据帧
- 了解R中的混淆矩阵
- R排序和子集因子
- R中的数据帧简介
- Python中的装饰器
- Android 系列 5 7使用Google ZXing条形码扫描器扫描条形码或QR码
- android 如何让通知不被清除或者点击后不消失
- android adb 查询apk安装到了哪里,已经安装到了哪里