【发布时间】:2016-11-18 14:21:12
【问题描述】:
在我的第一份全职工作中,我已经使用 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
现在的问题是,在 Excel 中检查了这个计算之后,我实际上得到的不是养老金领取者数据的平均值,而是所有数据的平均值。有没有办法直接从我在 SQL 中创建的表中计算平均值(和其他统计数据)?
注意:我可以通过将数据导出到 Excel 来计算所有这些统计数据,但它更耗时。我更愿意学习如何在 SQL 中执行此操作。
【问题讨论】:
-
欢迎来到使用 SQL 的世界。这里的草很绿。
-
@mendosi - 谢谢伙计!
标签: sql sql-server sql-server-2012