Sql 求和列并除以另一字段中的不同项

Sql 求和列并除以另一字段中的不同项,sql,distinct,division,Sql,Distinct,Division,我需要对一列求和,然后除以另一列中的不同值 Column A Column B 10 James 20 Phill 02 James 10 Bill 23 Bill 14 James 我的答案是A列(79)的和除以不同的詹姆斯(3)、菲尔(1)、比尔(2) 我的答案应该是:

我需要对一列求和,然后除以另一列中的不同值

Column A           Column B
10                  James
20                  Phill
02                  James
10                  Bill
23                  Bill
14                  James
我的答案是A列(79)的和除以不同的詹姆斯(3)、菲尔(1)、比尔(2)

我的答案应该是:

James  26.333
Phil   79
Bill   39.5
我试过:

select sum(column A)/distinct (column B)

对“金额”列求和,并按名称分组

按名称从TableName组中选择名称、金额(金额)作为金额

我的结果是:

Name    Amt
Bill    33
James   26
Phill   20
你的问题变了。我会更新答案

SELECT (SELECT SUM(Amount) FROM TableName) / COUNT(Name) AS CalcAmount, Name
FROM TableName GROUP BY Name
结果:

CalcAmount  Name
39  Bill
26  James
79  Phill

您可以摆弄它

您可以使用窗口功能:

select columnB,
       sum(sum(columnA)) over ()) / count(columnB) as YourAverage
from t
group by columnB;
是SQL FIDLE。

请尝试此代码

SELECT C2, MAX(A.SUMC1)/COUNT(C2) CalcAmount
FROM TableA,
(SELECT SUM(C1) SUMC1 FROM TableA) A
GROUP BY C2
它起作用了,我在SQLFiddle中签了名,试试这个, 假设: 表名=测试,列A=销售,列B=名称

     SELECT a.name, 
     (SELECT SUM(b.sales) / COUNT(a.NAME) FROM test AS b)
     FROM test AS a
     GROUP BY NAME
当您的DBMS支持“窗口函数”时,您可以执行以下操作:

SELECT ColB, CAST(SUM(SumA) OVER () AS FLOAT)/cnt CalcAmount
FROM
 (
   SELECT
      ColB,
      SUM(ColA) AS SumA, 
      COUNT(*) AS cnt
   FROM TableA
   GROUP BY ColB
 ) AS dt

如果ColA是一个整数,您需要强制转换(SUM(SumA)OVER()为FLOAT/DECIMAL)以避免结果被破坏

您的SQL风格是什么(MySQL、Oracle、SQL Server等)?不必要的复杂。这不会给出OP所需的输出。这不会运行,因为聚合是在窗口函数之前计算的,您需要将其嵌套在派生表/CTE中
SELECT ColB, CAST(SUM(SumA) OVER () AS FLOAT)/cnt CalcAmount
FROM
 (
   SELECT
      ColB,
      SUM(ColA) AS SumA, 
      COUNT(*) AS cnt
   FROM TableA
   GROUP BY ColB
 ) AS dt