2016-11-18 83 views
3

我在第一次全職工作中使用了大約一週的SQL,並且我試圖從一個查詢中計算一些統計數據,表。SQL:如何計算一個查詢的平均值

具體而言,我試圖從一個組合表中計算出平均值,其中我應用了過濾器(或約束?我不清楚SQL語言)。

從做research on Google,我學會了如何計算平均:

SELECT AVG(column_name) 
FROM table_name 

我遇到的問題是,這似乎只與數據庫中存在的表來工作,而不是用新的查詢我已創建。

我的代碼的簡化版本如下:

SELECT 
    Animal_Facts.Animal_Name, Animal_Facts.Prev_Reg_Amount, 
    Names.Given_Name, Animal_Class.Class_Description 
FROM 
    Names 
INNER JOIN 
    Animal_Facts ON Names.Name_Key = Animal_Facts.Name_Key 
INNER JOIN 
    Animal_Class ON Animal_Facts.Class_Key = Animal_Class.Class_Key 

此查詢創建結合了四列從三個表,其中Class_Description介紹了動物是否絕育,植入芯片,通過一個養老金領取者等擁有,Pre_Reg_Amount是支付的註冊費。

我想找到退休人員支付的平均費用,所以我包括下面的代碼行過濾表:

AND Animal_Class.Class_Description LIKE ('%pensioner%') 

然後計算我添加平均:

SELECT AVG(Animal_Facts.Prev_Reg_Amount) from Animal_Facts 

所以我的代碼是:

SELECT 
    Animal_Facts.Animal_Name, Animal_Facts.Prev_Reg_Amount, 
    Names.Given_Name, Animal_Class.Class_Description 
FROM 
    Names 
INNER JOIN 
    Animal_Facts ON Names.Name_Key = Animal_Facts.Name_Key 
INNER JOIN 
    Animal_Class ON Animal_Facts.Class_Key = Animal_Class.Class_Key 
       AND Animal_Class.Class_Description LIKE ('%pensioner%') 

SELECT AVG(Animal_Facts.Prev_Reg_Amount) 
FROM Animal_Facts 

現在的問題是,在Exce我實際上並沒有得到養老金領取者數據的平均值,而是所有數據的平均值。有沒有一種方法可以直接從我在SQL中創建的表中計算平均值(和其他統計數據)?

注意:我能夠通過將數據導出到Excel來計算所有這些統計數據,但它耗時更多。我寧願學習如何在SQL中做到這一點。

+0

歡迎來到使用SQL的世界。這裏的草很綠。 – mendosi

+0

@mendosi - 謝謝隊友! –

回答

5
SELECT AVG(af.Prev_Reg_Amount) 
FROM 
    Animal_Facts af 
    INNER JOIN Animal_Class ac 
    ON af.Class_Key = ac.Class_Key 
    AND Class_Description LIKE ('%pensioner%') 
+0

感謝隊友,這絕對是我需要的數字,比使用excel快得多。 –

+0

有沒有辦法先建立一個表格,然後計算出統計數據(用Excel的方式),或者這是計算平均值的最好方法嗎? –

+0

@BJJBA確定你可以建立一個表格,但是如果你想在生成表格的同時進行分組和事情,你需要使用一些不同的技術。查看窗口函數AVG()OVER(),使用多維數據集,分組集。 Excel是一個前端工具。它也不會同時創建統計信息,而是使用數據集創建統計信息。 SQL查詢就像創建一個數據集,然後你只需要添加你想要的功能。所以,如果你想在AVG()和SUM()上面簡單地在SELECT AVG(),SUM()......之後創建另一個計算列 – Matt