2012-03-22 203 views
0

我正在尝试获取SQL中比率的平均值。SQL划分的平均值

我的表看起来像这样:

T_TOTAL | NUM_ASSETS 
---------------------- 
    32 |  8 
    20 |  4 
    24 |  4 

而且使价值我后为:

T_TOTAL | NUM_ASSETS | T_TOTAL/NUM_ASSETS 
--------------------------------------------- 
    32 |  8  |   4 
    20 |  4  |   5 
    24 |  4  |   6 
          ------------------- 
          AVG = 5 

到目前为止,我有这个,但它不工作:

SELECT T_TOTAL As Time, NUM_ASSETS As Assets, 
Time/Assets As TimePerAsset, AVG(TimePerAsset) As Result 
FROM MATCHES 

任何想法?

+0

定义“不工作“。 – dan04 2012-03-22 23:04:21

+0

@ dan04我在别名上收到'无效列名'错误 – greener 2012-03-22 23:06:53

回答

2
select avg(t_total/num_assets) from matches 

而且,如果您NUM_ASSETS有0,则可以通过0避免分工是这样的:

select avg(t_total/nullif(num_assets, 0)) from matches 
+0

由于被零除法是非法的,所以会抛出错误 – 2012-03-22 23:11:11

+0

完美工作,包括避免除以0. Mange tak。 – greener 2012-03-22 23:13:26

+0

@a_horse_with_no_name这就是为什么我发布第二个sql来处理这个问题的原因 – 2012-03-23 08:11:15

0

你可以试试这个

SELECT T_TOTAL As Time, NUM_ASSETS As Assets, 
case when Assets <> 0 then Time/Assets end As TimePerAsset, AVG(case when Assets <> 0 then Time/Assets end) As Result 
FROM MATCHES 
+0

尝试了您的解决方案,但它给了我一个错误“无效列名'时间'” – greener 2012-03-22 22:56:14

1
SELECT M.Time, M.Assets, M.TimePerAsset, Avg(M.TimePerAsset) as AvgTimePerAsset 
FROM 
(
    SELECT T_TOTAL As TotalTime 
     , NUM_ASSETS As Assets 
     , CASE WHEN NUM_ASSETS <> 0 THEN T_TOTAL/NUM_ASSETS ELSE NULL END As TimePerAsset 
    FROM Matches 
) M 
GROUP BY M.Time, M.Assets, M.TimePerAsset 
+0

我明白你的意思是除以0.它给出了一个错误“无效的列名'资产'”。但它只是一个别名? – greener 2012-03-22 22:51:01

+0

你是对的,我更新了我的答案,不要在该位置使用别名。 – Taryn 2012-03-22 22:57:41

3
SELECT t.*, 
     Result = AVG(TimePerAsset) 
    FROM (
      SELECT [Time] = T_TOTAL, 
        [Assets] = NUM_ASSETS, 
        [TimePerAsset] = CASE WHEN NUM_ASSETS <> 0 
              THEN T_TOTAL/NUM_ASSETS 
              ELSE NULL 
            END 
       FROM MATCHES 
     ) t 
+0

尝试了你的解决方案,但它给了我一个错误“无效列名'时间'” – greener 2012-03-22 22:56:26

+0

@greener,这是因为'时间'是MSSQL中的关键字:)。答案已更新。 – Akhil 2012-03-22 22:57:40

+0

谢谢!但现在我在资产上遇到同样的错误?! – greener 2012-03-22 23:02:10