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

时间:2009-09-08 15:18:39

标签: sql sql-server tsql

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

产生输出

PAGECOUNT
27个
19个
59个

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

(AVG(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 个答案:

答案 0 :(得分:35)

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

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

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

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

答案 1 :(得分:4)

您的子查询应该有一个别名,就像在此

中一样
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

答案 2 :(得分:3)

在你的第二次尝试中你错过了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

答案 3 :(得分:3)

添加子查询别名

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

答案 4 :(得分:2)

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

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

第二,你没有在最后关闭你的支架。 3,你必须命名你的内部查询。

这应该有效

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

答案 5 :(得分:1)

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

第一步:从ut11表中选择第一列

第二步:从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