Sql 哪些类别的平均收入高于总体平均水平

Sql 哪些类别的平均收入高于总体平均水平,sql,sql-server,Sql,Sql Server,如何通过大于条件?我收到一个错误,列名称“average”无效 这是我的密码: SELECT P.prod_cat, AVG(total_amt) AS average FROM Transactions T JOIN prod_cat_info P ON T.prod_cat_code = P.prod_cat_code WHERE average > AVG(total_amt) GROUP BY prod_cat 根据你问题的标题,我认为你想要: SELE

如何通过大于条件?我收到一个错误,列名称“average”无效

这是我的密码:

SELECT P.prod_cat, AVG(total_amt) AS average 
FROM Transactions T JOIN 
     prod_cat_info P 
     ON T.prod_cat_code = P.prod_cat_code
WHERE average > AVG(total_amt)
GROUP BY prod_cat

根据你问题的标题,我认为你想要:

SELECT p.prod_cat, AVG(t.total_amt) AS average 
FROM (SELECT t.*, AVG(t.total_amt) OVER () as overall_average
      FROM Transactions T
     ) t JOIN
     prod_cat_info P 
     ON T.prod_cat_code = P.prod_cat_code
GROUP BY p.prod_cat, overall_average
HAVING AVG(t.total_amt) > overall_average;

根据你问题的标题,我认为你想要:

SELECT p.prod_cat, AVG(t.total_amt) AS average 
FROM (SELECT t.*, AVG(t.total_amt) OVER () as overall_average
      FROM Transactions T
     ) t JOIN
     prod_cat_info P 
     ON T.prod_cat_code = P.prod_cat_code
GROUP BY p.prod_cat, overall_average
HAVING AVG(t.total_amt) > overall_average;

因为您试图将所有行与单个值进行比较,所以应该确保只获得该单个值一次。以下代码在我的一个较大的本地数据库中表现良好(表名已更改以保护无辜者):


因为您试图将所有行与单个值进行比较,所以应该确保只获得该单个值一次。以下代码在我的一个较大的本地数据库中表现良好(表名已更改以保护无辜者):


您的查询在语法上显然是不正确的。它也不能表达你想做什么。请提供示例数据和所需结果,并提供清晰的解释。您不能在
的WHERE
中按别名引用列。您唯一可以执行此操作的地方是按排序的
。再加上在
的WHERE
中有一个聚合。即使这是正确的,也意味着您试图运行一个查询,其中
Average
的值大于
Average
,这是不可能的。值永远不能大于其本身。您的查询在语法上显然不正确。它也不能表达你想做什么。请提供示例数据和所需结果,并提供清晰的解释。您不能在
的WHERE
中按别名引用列。您唯一可以执行此操作的地方是按
排序的
。再加上在
的WHERE
中有一个聚合。即使这是正确的,也意味着您试图运行一个查询,其中
Average
的值大于
Average
,这是不可能的。一个值永远不能大于它本身。我想你需要一些
JOIN
关键字在那里的某个地方?@TomH。谢谢。我想你需要一些
JOIN
关键字吗?@TomH。非常感谢。