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