代码之家  ›  专栏  ›  技术社区  ›  simon

从SQL Server中的子查询值或其他聚合函数获取平均值

  •  21
  • simon  · 技术社区  · 15 年前

    我有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))
    
    

    它产生输出

    页数
    二十七
    19
    五十九

    现在我想用SQL计算所有这些数字的平均值。显然嵌套的聚合函数

    (平均(count(pagecount)))

    不允许,并且使用类似

    
    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行的平均值?

    6 回复  |  直到 6 年前
        1
  •  34
  •   Robin Day    15 年前

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

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

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

    SELECT
        AVG(pageCount)
    FROM
    (
        SELECT 
            COUNT(ActionName) AS pageCount
        FROM
            tbl_22_Benchmark
    ) MyTable
    
        2
  •  4
  •   eKek0    15 年前

    子查询应该有一个别名,如下所示

    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
  •  3
  •   Mladen Prajdic    15 年前

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

    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
  •  3
  •   Charles Bretana    15 年前

    添加子查询别名

    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
  •  2
  •   Lukasz Lysik    15 年前

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

    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
  •  1
  •   mypetlion    6 年前

    **如果要使用过程从两个不同的值中计算平均值**

    步骤1:从UT11表中选择第一列

    步骤2:从UT12表中选择第二列

    步骤3:使用左联接联接联接此表

    步骤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