我正在使用 SQL Server,并且我的数据库中有下表 exampleTable
:
exampleGroup | 示例名称 | exampleValue |
---|---|---|
A | name1 | 100 |
B | name2 | 500 |
C | name3 | 300 |
B | name4 | 700 |
A | name5 | 500 |
C | name6 | 600 |
我的目标是返回以下结果,其中我在附加列中有每个组的平均值:
exampleGroup | 示例名称 | exampleValue | 平均示例组 |
---|---|---|---|
A | name1 | 100 | 300 |
A | name5 | 500 | 300 |
B | name2 | 500 | 600 |
B | name4 | 700 | 600 |
C | name3 | 300 | 450 |
C | name6 | 600 | 450 |
到目前为止我尝试过的(有错误,因为它不计算每组的平均值,而是计算所有列的总平均值):
SELECT
exampleGroup, exampleName, exampleValue,
(SELECT AVG(exampleValue) FROM exampleTable) AS averageExampleGroup
FROM exampleTable;
答案 0 :(得分:2)
使用over()
select exampleGroup, exampleName, exampleValue,
Avg(exampleValue) over(partition by exampleGroup) averageExampleGroup
from exampleTable
答案 1 :(得分:2)
您只需要像这样使用 OVER()
子句:
SELECT
exampleGroup, exampleName, exampleValue,
AVG(exampleValue) OVER (PARTITION BY exampleGroup) AS GroupAvg
FROM exampleTable;
这会返回基于每个 exampleGroup
的平均值作为结果集中的新列。
答案 2 :(得分:0)
如果您想要每个组的平均值,那么您需要将行限制为该特定组。换句话说,您需要使用 SELECT AVG(...
限定 where
。
SELECT e1.exampleGroup
,e1.exampleName
,e1.exampleValue
,(SELECT AVG(e2.exampleValue)
FROM exampleTable e2
where e2.exampleGroup = e1.exampleGroup) AS averageExampleGroup
FROM exampleTable e1;