我有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行的平均值?
答案 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