当前位置:网站首页>ClickHouse 中的公共表表达式CTE
ClickHouse 中的公共表表达式CTE
2022-07-28 05:24:00 【奇怪的守护神】

什么是公共表表达式(CTE) ?在本文中,学习如何在 ClickHouse 数据库中使用 CTE,并通过示例跟踪用例
在下列情况下使用 CTE 很方便:
- 当一个请求可以获得数据,并且其大小适合内存空间时
- 需要多次使用此查询的结果
- 创建递归查询
额外的好处是提高了 SQL 查询的可读性。
CTE 与临时表和嵌套查询之间的区别是什么?
- 如果子查询是相关的,那么它的调用将针对选定内容中的每一行重复,从而显著增加执行此查询的成本。
- 用大量数据填充临时表会在磁盘上造成负载。
- 由于存储临时表的特殊性,使用临时表执行查询会增加执行时间。
语法
ClickHouse 既支持 WITH< 表达式 > AS < 标识符 > ,也支持 WITH< 标识符 > AS < 子查询表达式 > 语法。
- 使用 WITH 初始化 CTE。
- 为查询提供名称。
- 接着是 AS。
- 定义查询
- 如果需要多个 CTE,请用逗号分隔它们。
WITH locations AS
(
SELECT location
FROM table
WHERE date > (today() - 10)
)
SELECT *
FROM locations
- 使用 WITH 初始化 CTE。
- 定义一个表达方式
- 接着是 AS。
- 为表达式提供名称。
- 如果需要多个 CTE,请用逗号分隔它们。
WITH ('USA', 'BRA') AS locations
SELECT 'ARG' IN (locations)
例子
建表:
CREATE TABLE SpareParts
(
`id` UInt32,
`partName` String,
`partOrigin` String,
`storeID` UInt32
)
ENGINE = MergeTree()
ORDER BY id
插入:
INSERT INTO SpareParts VALUES (1, 'headlight', 'USA', 1)
INSERT INTO SpareParts VALUES (2, 'hood', 'JPN', 1)
INSERT INTO SpareParts VALUES (3, 'bumper', 'USA', 1)
INSERT INTO SpareParts VALUES (4, 'radiator', 'BRA', 3)
INSERT INTO SpareParts VALUES (5, 'wheel', 'BRA', 2)
INSERT INTO SpareParts VALUES (6, 'stabilizer', 'ARG', 3)
INSERT INTO SpareParts VALUES (7, 'absorber', 'TUR', 2)
INSERT INTO SpareParts VALUES (8, 'cable', 'MEX', 1)
INSERT INTO SpareParts VALUES (9, 'spring', 'MEX', 3)
INSERT INTO SpareParts VALUES (10, 'door', 'USA', 2)
选择:
WITH
originsByStore AS
(
SELECT
storeID,
groupArray(partOrigin) AS origins
FROM SpareParts
GROUP BY storeID
),
partsByStore AS
(
SELECT
storeID,
groupArray(partName) AS partNames
FROM SpareParts
GROUP BY storeID
),
has(origins, 'USA') = 1 AS isUSA
SELECT
storeID,
origins,
partNames,
isUSA
FROM originsByStore AS t1
LEFT JOIN
(
SELECT
storeID,
partNames
FROM partsByStore
) AS t2 USING (storeID)
结果:
博主个人博客网站:https://www.beierblog.com
本文原创作者:奇想派、一名努力分享的程序员。
文章首发平台:微信公众号【编程达人】

原创不易!各位小伙伴觉得文章不错的话,不妨关注公众号,进行点赞(在看)、转发三连走起!谢谢大家!
边栏推荐
- Matlab 信号处理
- 福禄克DSX2-5000、DSX2-8000模块如何找到校准到期日期?
- dsp和fpga的通讯
- ASP. Net read database bound to treeview recursive mode
- Arduino reads the analog voltage_ How mq2 gas / smoke sensor works and its interface with Arduino
- ICC2分析时序的神器 analyze_design_violations
- Word邮件合并功能详解:合并后生成多个word文档,删除空白页
- PT 基于Multi Voltage的Physical Aware
- set_ clock_ groups
- In asp Usage of cookies in. Net
猜你喜欢
随机推荐
PyTorch 学习笔记 1 —— Quick Start
雷达成像 Matlab 仿真 4 —— 距离分辨率分析
Distinguishing PCB quality by color is a joke in itself
ConNeXt
雷达成像 Matlab 仿真 1 —— LFM信号及其频谱
T-sne dimension reduction visualization
Web scrolling subtitles (marquee example)
How to view the transfer function of the module directly built by Simulink
4、 Model optimizer and inference engine
mixup_ ratio
t-SNE降维可视化
Talking about fluke optical cable certification? What is CFP? What is OFP?
How to use the bit error meter?
set_case_analysis
Convert data in grilview into datatable
VAN(DWConv+DWDilationConv+PWConv)
Summary of Intranet Information Collection
Agilent安捷伦 E5071测试阻抗、衰减均正常,惟独串扰NG?---修复方案
(PHP graduation project) based on PHP online travel website management system to obtain
PyTorch 学习笔记 3 —— DATASETS & DATALOADERS & TRANSFORMS










