返回每行中每组的平均值

时间:2021-03-13 10:01:19

标签: sql sql-server

我正在使用 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;

3 个答案:

答案 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;
相关问题