首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql中添加多个"With“子句

在sql中添加多个"With“子句
EN

Stack Overflow用户
提问于 2015-01-18 11:10:14
回答 2查看 192关注 0票数 2

我正在使用oracle数据库10g,并试图计算数据set.Though的上控制限制和较低的控制限制--对电话号码值来说似乎没有什么用,但我只是试图将它用作学习experience.The输出时,应该有一个逐行格式,用于输入:-问候语、zip、lcl和ucl值,这将使人们更好地理解数据。

代码语言:javascript
复制
with q as(

 select student_id,salutation,zip,first_name,last_name from tempTable)

 with r as(

 select avg(phone) as average,stddev(phone) as sd from tempTable)

 select salutation,zip,average-3*sd as"lcl",average+3*sd as"UCL"

from
q ,r

给出的错误是select语句缺少.Please告诉我出了什么问题,我是一个sql新手,不能自己做

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-18 11:13:13

当对第一个CTE使用CTE expect时,您不需要With关键字,而是在CTE名称之前使用comma。试试这个语法。

代码语言:javascript
复制
WITH q 
     AS (SELECT student_id, 
                salutation, 
                zip, 
                first_name, 
                last_name 
         FROM   temptable), 
     r 
     AS (SELECT Avg(phone)    AS average, 
                STDDEV(phone) AS sd 
         FROM   temptable) 
SELECT salutation, 
        zip, 
        average - 3 * sd AS"lcl", 
        average + 3 * sd AS"UCL" 
FROM   q Cross Join r; 
票数 2
EN

Stack Overflow用户

发布于 2015-01-18 11:59:57

我认为您根本不需要一个WITH子句来运行这样的查询。最好将AVG()STDDEV()函数用作窗口函数( Oracle中的分析函数):

代码语言:javascript
复制
SELECT temp1.*, average - 3 * sd AS lcl, average + 3 * sd AS ucl
  FROM (
    SELECT student_id, salutation, zip, first_name, last_name
         , AVG(phone) OVER ( ) AS average, STDDEV(phone) OVER ( ) AS sd
      FROM tempTable
) temp1

您甚至不需要子查询,但它可以帮助保存一些击键。请参阅这个演示程序和来自DUAL的虚拟数据。

如果您想使用temp1来获取子查询中选择的所有列,那么您确实需要子查询的别名(在本例中是temp1) --否则不会工作。或者,您可以显式地命名这些列,这是一个很好的实践。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28009010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档