You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL查询利润高于平均值的记录返回空结果问题求助

问题分析与解决方案

原查询返回空结果的原因

你的查询逻辑存在两个关键错误:

  1. 分组方式错误:使用GROUP BY product_id, profit时,由于id(即你写的product_id)是唯一值,每个分组仅包含单条记录,此时AVG(profit)计算的是当前分组(单条记录)的利润平均值,也就是这条记录自己的profit值。
  2. 条件判断无效:因为你的profit都是整数型的数值(如6.00、3.00),AVG(profit)::INT会将当前记录的profit转为整数,此时profit > AVG(profit)::INT等价于6.00 > 6、3.00 > 3这类不成立的判断,因此没有符合条件的记录返回。

正确查询语句

要筛选出利润高于全表平均利润的记录,需要先计算全局平均利润,再进行筛选,以下是两种可行写法:

写法1:子查询获取全局平均

SELECT id AS product_id, profit
FROM products
WHERE profit > (SELECT AVG(profit) FROM products);

写法2:窗口函数计算全局平均

SELECT id AS product_id, profit
FROM (
    SELECT id, profit, AVG(profit) OVER () AS avg_profit
    FROM products
) sub_query
WHERE profit > avg_profit;

验证结果

根据你提供的数据,全表利润平均值约为4.51,上述查询会返回所有profit > 4.51的记录,比如id=1(6.00)、id=6(8.00)、id=20(16.00)等符合条件的条目。

内容的提问来源于stack exchange,提问作者visionary_20

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:50:30