sql中with用法

下面是with使用的一个实例:

--使用with定义基础表
WITH RES_USER AS (SELECT VU.USER_ID,VU.NAME FROM USER_TABLE VU),RES_ORG AS(SELECT VO.ORG_ID,VO.NAME FROM ORG_TABLE VO)

SELECT       T.* ,
                 (SELECT NAME FROM RES_USER U WHERE                           U.USER_ID=T.useId)  uName,
                (SELECT NAME FROM RES_ORG O WHERE O.ORG_ID=T.orgId) oName
 FROM TABLE_NAME_2   T
 where T.ID=''

 with用法在作为基础表的时候很方便从一个表中选取不同的结果,将公用的结果放在内存中,整体来说还是降低内存的消耗。

 with通常与AS连用,也叫做子查询部分。用法如下:

 1.用来定义一个sql片段,该片段会被整改sql语句所用到:

   WITH RES_USER AS (SELECT VU.USER_ID,VU.NAME FROM USER_TABLE VU)

 2.可以使sql语句的可读性更高

 3.也有可能在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有用。因为UNION ALL的每个部分可能相同,但是如果

   每个部分都执行一次则成本太高,所以使用WITH AS 短语,则只要执行一次

 

### SQL WITH 子句使用教程 #### 一、定义与功能 WITH 子句,也被称为公共表表达式(Common Table Expression, CTE),是在执行查询前构建的一个临时的结果集。这种结构有助于简化复杂的查询逻辑,在不影响原始SQL语句的前提下提供了一种清晰的方式来处理中间计算或重复使用的子查询[^1]。 #### 二、基本语法 通用的WITH子句语法如下所示: ```sql WITH cte_name AS ( SELECT column1, column2... FROM table_name WHERE condition ) SELECT * FROM cte_name; ``` 这里`cte_name`代表给CTE起的名字,括号内的部分是一个标准的选择查询,用来定义这个名称所对应的虚拟表格内容。 #### 三、实际应用案例 为了更好地理解如何运用WITH子句,下面给出一个具体的例子来展示其工作原理。假设有一个名为`SalesOrders`的销售订单表,现在想要获取每个月份的第一笔交易记录以及该月总销售额的信息。 ```sql WITH MonthlyFirstSale AS( SELECT MIN(OrderDate) as FirstOrderDate, SUM(TotalAmount) OVER(PARTITION BY YEAR(OrderDate), MONTH(OrderDate)) as MonthTotalSales, CustomerID, ProductName FROM SalesOrders GROUP BY YEAR(OrderDate), MONTH(OrderDate), CustomerID, ProductName ), RankedSales AS( SELECT *, ROW_NUMBER() OVER(PARTITION BY YEAR(FirstOrderDate), MONTH(FirstOrderDate) ORDER BY FirstOrderDate ASC) rn FROM MonthlyFirstSale ) SELECT * FROM RankedSales WHERE rn = 1; ``` 上述代码首先通过第一个CTE `MonthlyFirstSale`计算出了每月每客户的产品首次购买日期及其当月总计金额;接着第二个CTE `RankedSales`利用窗口函数为每一月份内按时间顺序排列的所有行分配编号;最后一步则是筛选出那些排名为1即最早的那条记录作为最终输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值