2013-11-23 55 views
2

我試圖計算害蟲的誰使用作物的同一品種一個城市的平均數量..的Sql計算平均

DistrictName | TownName   | CropName |Pests 
Rawalpindi  | pindi    | CIM 506  | 3.3  
Rawalpindi  | pindi    | CIM 506  | 3.8  
Rawalpindi  | Muree    | CIM 506  | 3.5 

但此查詢不斷給我的語法錯誤,即無效列名PestPopulation1凡爲我徹底檢查我的列名的拼寫... PestPopuplationvarchar(max)

下面的是我的查詢

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.PestPopulation1) 
FROM (
    SELECT DistrictName, TownName,VarietyOfCrop, cast(PestPopulation1 as float) as Pests 
    FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 

回答

4

如前所述,問題在於您引用了該範圍內不可用的列。

總的來說,甚至沒有一個很好的理由來使用這樣一個人爲的查詢。這應該工作一樣好,而且是更具可讀性:

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(cast(T.Pests as float)) 
FROM FinalTable2 T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 
+0

將數據類型nvarchar轉換爲float時出錯。它給了我這個錯誤......我的Pest列在varchar max中 – user1056466

0

試試這個

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.PestPopulation1) 
FROM (
    SELECT DistrictName, TownName,VarietyOfCrop, cast(Pests as float) as PestPopulation1 
    FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 
4

這給你一個錯誤的原因是因爲你給了表達cast(PestPopulation1 as float)別名Pests

您應該使用別名在外部查詢,像這樣:

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.Pests) 
FROM (
    SELECT DistrictName, TownName,VarietyOfCrop, cast(PestPopulation1 as float) as Pests 
    FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 

您應該能夠通過推動cast簡化此查詢到avg,像這樣:

SELECT 
    DistrictName 
, TownName 
, VarietyOfCrop 
, avg(convert(float, PestPopulation1)) as avg_pests 
FROM FinalTable2 
group by T.DistrictName, T.TownName, T.VarietyOfCrop 

將數據類型nvarchar轉換爲float時出錯。我的PestPopulation1列中的varchar(max)

您需要使用CONVERT而不是CAST(參見上文)。

+0

將數據類型nvarchar轉換爲float時出錯。它給了我這個錯誤...我的Pest列的varchar max - – user1056466

+0

@ user1056466然後使用'convert'而不是'cast'。 – dasblinkenlight

+0

錯誤沒有改變:/ – user1056466

0

爲什麼不(與CONVERT而不是CAST):

SELECT DistrictName, TownName,VarietyOfCrop, AVG(CONVERT(float, PestPopulation1)) as Pests 
FROM FinalTable2 
GROUP BY DistrictName, TownName,VarietyOfCrop 

查詢中的錯誤是,你引用的列的表T還沒有。派生表T具有ColumnName,TownName,VarietyOfCrop和Pests列,並且引用的列PestPopulation1不存在。

+0

將數據類型nvarchar轉換爲float時出錯。它給我這個錯誤...我的Pest列在varchar max - – user1056466

+0

@ user1056466試試這個,用CONVERT代替CAST – eKek0

+0

仍然是同樣的錯誤:/ – user1056466

0

您使用了錯誤的列名,別名,PestPopulation1是在你的子查詢害蟲,請找修正查詢:

SELECT T.DistrictName, T.TownName, T.VarietyOfCrop, avg(T.Pests) 
FROM ( 
SELECT DistrictName, TownName,VarietyOfCrop, cast(PestPopulation1 as float) as Pests 
FROM FinalTable2 
) as T 
group by T.DistrictName, T.TownName, T.VarietyOfCrop