1. 简述
WITH
和 CREATE VIEW
有点类似Python给变量赋值,它们的区别是:
-
WITH
:创建临时表以供复用,执行完毕自动清理,无法执行增删改操作(只能被SELECT)创建临时表并使用:
WITH a AS (SELECT * FROM table_a) # 在这里没有分号! SELECT col FROM a
-
CREATE VIEW
:创建虚拟表以供复用,不删除还存在,可以对视图进行DML操作创建 视图:
CREATE VIEW a AS # 这里没有括号! SELECT * FROM table_a;
删除视图:
DROP VIEW a;
2. 小结
CREATE VIEW | WITH | |
---|---|---|
语法 | CREATE VIEW view_name AS SELECT 语句(视图); SELECT 语句(你的查询); |
WITH name AS (SELECT 语句(临时表)) SELECT 语句(你的查询); |
用法 | 便于复用的视图,需要自行删除 | 便于复用的临时表 ,自动删除 |
注意1 | 上述语法分号的位置 | 上述语法分号的位置,即后面必须直接紧跟SQL语句 |
注意2 | AS 后的语句不需要使用括号 | AS 后的语句需要使用括号,再次强调with as 后面必须紧跟使用CTE(Common table Express) |
注意3 | AS 不可省略 | AS 不可省略 |
附:CTE(Common table Express)
待深入了解
3. 实例
表格user_behavior_cnt_grouping
:
临时表
从上表中构造零时表:
WITH behavior_cnt AS
(SELECT COUNT(*) 'cnt_all',
SUM(IF(pv_grouping > 0, 1, 0)) 'pv_total',
SUM(IF(pv_grouping > 0 AND fav_grouping > 0 AND cart_grouping > 0 AND buy_grouping > 0, 1, 0)) 'pv-fav-cart-buy'