SQL:如何计算查询的平均值

时间:2016-11-18 00:17:58

标签: sql sql-server sql-server-2012

在我的第一份全职工作中,我一直在使用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描述了动物是否已被desexed,微芯片化,由养老金领取者拥有等,而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

现在问题是,在Excel中检查这个计算后,我实际上并没有得到养老金领取者数据的平均值,而是所有数据的平均值。有没有办法直接从我在SQL中创建的表中计算平均值(和其他统计数据)?

注意:我可以通过将数据导出到Excel来计算所有这些统计信息,但这要花费更多时间。我更愿意在SQL中学习如何做到这一点。

1 个答案:

答案 0 :(得分:6)

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%')