sql - 哪些类别的平均收入高于整体平均水平
问题描述
如何通过大于条件?我收到一个错误,因为列名“平均”无效。
这是我的代码:
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
解决方案
由于您试图将所有行与单个值进行比较,因此您应该确保只获得该单个值一次。以下代码在我的一个较大的本地数据库中具有不错的性能(表名已更改以保护无辜者):
WITH CTE_Overall_Avg AS (SELECT AVG(total_amt) AS overall_avg FROM Transactions)
SELECT
TX.prod_cat,
AVG(TX.total_amt) AS prod_cat_avg,
MAX(OA.overall_avg) AS overall_avg
FROM
Transactions TX
INNER JOIN CTE_Overall_Avg OA ON 1 = 1
GROUP BY
TX.prod_cat
HAVING
AVG(TX.total_amt) > OA.overall_avg
推荐阅读
- node.js - 来自 forEach 函数的多个承诺
- r - curl::curl_fetch_memory(url, handle = handle) 中的错误:操作被 RStudio 中的应用程序中止
- sql - 如何在 SQL 的单列中合并三个差异列
- javascript - 文档上的 document.click()
- android - Android 在 Recycler View 的 Grid Layout Manager 项目之间显示全跨度动态视图?
- css - Angular 反应形式:无法使用 ngClass
- python - skimage/opencv contour 给出的数组是如何排序的?
- php - 在 php 中使用 Foreach 将数据导入数据库的最佳方法是什么?
- java - “var”和原始类型如何结合在一起?
- php - 警告:strtotime() 期望参数 1 是字符串,php 中给出的对象