在我的第一份全职工作中,我一直在使用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中学习如何做到这一点。
答案 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%')