【问题标题】:Getting an average from subquery values or another aggregate function in SQL Server从 SQL Server 中的子查询值或另一个聚合函数中获取平均值
【发布时间】:2009-09-08 15:18:38
【问题描述】:

我有 SQL 语句(SQL Server)

SELECT COUNT(ActionName) AS pageCount FROM tbl_22_Benchmark WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7 GROUP BY dateadd(dd,0, datediff(dd,0,CreationDate))

产生输出

页数
27
19
59

现在我想使用 SQL 获得所有这些数字的平均值。显然是嵌套的聚合函数,例如

(平均(计数(页数)))

是不允许的,并且使用像这样的子查询 SELECT AVG(pageCount) FROM ( SELECT COUNT(ActionName) AS pageCount FROM tbl_22_Benchmark WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7 GROUP BY dateadd(dd,0, datediff(dd,0,CreationDate)) )

只给我一条错误消息')'附近的语法不正确。

如何获得 pageCount 行的平均值?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    我看不到您的整个查询,因为它似乎没有正确发布。

    但是,我相信您的问题纯粹是缺少派生表/嵌套子查询的名称。

    给它一个别名,例如本例中的 MyTable

    SELECT
        AVG(pageCount)
    FROM
    (
        SELECT 
            COUNT(ActionName) AS pageCount
        FROM
            tbl_22_Benchmark
    ) MyTable
    

    【讨论】:

    • 显然小于字符 <必须写为 HTML 实体。我已经在那里编写了所有代码,但这阻止了其余代码的显示。谢谢,这似乎解决了问题。
    【解决方案2】:

    你的子查询应该有一个别名,像这样

    SELECT AVG(pageCount) FROM
    (
    SELECT 
    COUNT(ActionName) AS pageCount
    FROM tbl_22_Benchmark
    WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)<7
    GROUP BY 
    dateadd(dd,0, datediff(dd,0,CreationDate))
    ) AS t
    

    【讨论】:

      【解决方案3】:

      在您的第二次尝试中,您缺少一个 ) 和一个别名:

      SELECT AVG(pageCount) as AvgPageCount FROM
      (
          SELECT 
          COUNT(ActionName) AS pageCount
          FROM tbl_22_Benchmark
          WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate)
      ) t
      

      【讨论】:

        【解决方案4】:

        添加子查询别名

        SELECT AVG(pageCount) 
        FROM (SELECT COUNT(ActionName) AS pageCount
              FROM tbl_22_Benchmark
              WHERE DATEPART(dw,CreationDate)>1 
                 AND DATEPART(dw,CreationDate) {Missing stuff here } ) AS Z
        

        【讨论】:

          【解决方案5】:

          首先你应该在查询结束时添加条件。例如:

          WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate) < 10
          

          第二,你最后没有关闭你的括号。 第三,你必须命名你的内部查询。

          这应该可行

          SELECT AVG(pageCount) FROM
          ( 
              SELECT 
              COUNT(ActionName) AS pageCount
              FROM tbl_22_Benchmark
              WHERE DATEPART(dw,CreationDate)>1 AND DATEPART(dw,CreationDate) < 10
          ) myInnerTable
          

          【讨论】:

            【解决方案6】:

            **如果你想使用程序计算两个不同的平均值 **

            step1:从 ut11 表中选择第一列

            step2:从ut12表中选择第二列

            step3:通过左连接加入这个表

            第4步:((t1.ut_1 + t2.ut_2)/2)作为总计算平均值

            SELECT    t1.ut_1
                     ,t2.ut_2
                     ,((t1.ut_1 + t2.ut_2)/2) AS total
            FROM      ut11 AS t1 
            LEFT JOIN ut12 AS t2 ON t1.roll_no = t2.roll_no 
            WHERE     t1.roll_no= rno 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-04-12
              • 2021-04-06
              • 2022-01-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多