如何在 SQL 中获取平均 IF 语句?

问题描述 投票:0回答:3

我在 MS Access 中有一个表,其中包含年份、期间(值只是

1
2
)、Costs_Per_Capita 和 CALCULATED_Period_Avg_Costs,PK 是 ID。

我需要计算

CALCULATED_Period_Avg_Costs
。它应该从
Costs_Per_Capita
列返回给定时间段内
Period
的平均值。在 Excel 中,我使用 SUMIF/COUNTIF 执行此操作,它返回平均 IF。

您对如何用 SQL 编写代码来做到这一点有什么建议吗?

结果应如下所示:

Costs_Per_Capita    Period              CALCULATED_Period_Avg_Costs
15,505              1                   15976.27582
16,368              1                   15976.27582
16,037              1                   15976.27582
15,995              1                   15976.27582
15,000              2                   16000
17,000              2                   16000

我使用的语句:

SELECT 
Costs_Per_Capita, Period
IFF (Period = 1, 
(Select AVG(Costs_Per_Capita) From Costs Where Period = 1), 
(Select AVG(Costs_Per_Capita) From Costs Where Period = 2) 
AS result
FROM Costs;

仍然出现“查询表达式中存在语法错误(缺少运算符)...”

sql ms-access average
3个回答
0
投票

我想我知道您在要求什么,并且我相信这就是您正在寻找的 -

Select
    Costs_Per_Capita,
    Related_Period_ID,
    (Select 
        Case when Related_Period_ID = 1 then 
        (Select
            AVG(Costs_Per_Capita)
            From Costs_Per_Capita_Table
            Where Related_Period_ID = 1)
        else 
       (Select
            AVG(Costs_Per_Capita)
            From Costs_Per_Capita_Table
            Where Related_Period_ID = 2)
        END 
    )
    From
    Costs_Per_Capita_Table

将 CASE 更改为 IFF

Select 
        IFF (Related_Period_ID = 1, 
        (Select
            AVG(Costs_Per_Capita)
            From Costs_Per_Capita_Table
            Where Related_Period_ID = 1),
       (Select
            AVG(Costs_Per_Capita)
            From Costs_Per_Capita_Table
            Where Related_Period_ID = 2)

0
投票

我是这样做的: 选择成本.人均成本、成本.期间、

IIF(成本.期间 = 1,

(从周期 = 1 的成本中选择 AVG(Costs_Per_Capita)),

(从期间 = 2 的成本中选择 AVG(人均成本)))

AS结果

来自成本;

另一种方式,如果有更多的周期,更好的是使用子查询:

选择 Costs.Period、Costs_Per_Capita、tmpQry.CALCULATED_Period_Avg_Costs

FROM Costs INNER JOIN (SELECT Costs.Period, Avg(Costs.Costs_Per_Capita)

根据成本计算的_期间_平均_成本

GROUP BY Costs.Period) AS tmpQry ON Costs.Period = tmpQry.Period;

也许以后有人会用它......


0
投票
Select CostsPerCapital, Period, avg(CostPerCapita) over (partition by Period)
From Table
Where....
Order by ...
© www.soinside.com 2019 - 2024. All rights reserved.