SQL 的 with as 临时中间表

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: SQL 的 with as 临时中间表

当我们书写一些结构相对复杂的SQL语句时,可能某个子查询在多个层级多个地方存在重复使用的情况,这个时候我们可以使用 with as 语句将其独立出来,极大提高SQL可读性,简化SQL。

目前 oracle、sql server、hive、MySQL8.0 等均支持 with as 用法。

语法

-- with table_name as(子查询语句) 其他sql
with temp as (
    select * from xxx
)
select * from temp;

如果定义了 with 子句,但其后没有跟 select 查询,则会报错(没有使用没关系,其后必须有 select),因此不允许单独使用。

如果要定义多个临时子查询:

WITH t1 AS (
        SELECT *
        FROM abc
    ),
    t2 AS (
        SELECT *
        FROM efg
    )
SELECT *
FROM t1, t2

前面的 with 子句定义的查询可以后边 with 子句中使用,但一个 with 子句内部不能嵌套 with 子句。

with t1 as (select * from abc),
t2 as (select t1.id from t1)
select * from t2

它只能在一条sql中使用。

案例

对考试成绩在本班平均成绩 75-80 的加 5 分,80 以上的加 10 分,其他的不加,实现代码为:

with temp_tb as (
    SELECT
        id,
        name,
        class,
        math,
        MAX(math) over(PARTITION by class) as max_math -- 每组最大值
    FROM
        students
)
SELECT *,
    CASE
        when max_math between 75 and 80 then math+5
        when max_math > 80 then math+10
        ELSE max_math
    END as rated_math
FROM
    temp_tb
'''
id|name|class|math|max_math|rated_math|
--+----+-----+----+--------+----------+
 1|张涛  |    1|  66|      78|        71|
 3|赵丹丹 |    1|  55|      78|        60|
 6|田迪  |    1|  78|      78|        83|
 8|周平  |    1|  77|      78|        82|
 2|王琳  |    2|  88|      88|        98|
 4|李成  |    2|  54|      88|        64|
 7|王卫栋 |    2|  88|      88|        98|
 5|赵天成 |    3|  77|      78|        82|
 9|武明  |    3|  78|      78|        83|
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
5月前
|
SQL 数据库 数据库管理
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
142 11
|
4月前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
37 1
|
3月前
|
SQL 监控 关系型数据库
PolarDB产品使用问题之SQL防火墙怎么拦截没有指定WHERE条件的特定表的SQL语
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
SQL 分布式计算 DataWorks
MaxCompute操作报错合集之使用sql查询一个表的分区数据时遇到报错,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
4月前
|
SQL 存储 测试技术
|
5月前
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
64 0
|
3月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
4月前
|
SQL 存储 数据库
SQL 撤销索引、撤销表以及撤销数据库
SQL 撤销索引、撤销表以及撤销数据库
56 4
|
4月前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
42 1
下一篇
无影云桌面