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

在PostgreSQL表中查询汽车买卖收益最高的用户

解决买卖汽车收益最高用户的SQL查询问题

没问题,我来帮你搞定这个查询!首先得明确核心需求:计算每个用户的总收益(卖出总金额 - 买入总金额),然后找出收益最大值对应的用户。

思路拆解

你的原查询只统计了卖出金额,还需要把买入的金额从卖出总额里扣除,才能得到真实收益。我们可以用CASE WHEN来区分买卖行为,对卖出的金额做加法、买入的做减法,再按用户(sell_id)分组求和。

方案一:基础版(适合多数数据库)

先计算每个用户的总收益,再按收益降序排序取第一行(如果多个用户收益相同且都是最大值,这个方法只会返回一个,适合只需要Top1的场景):

SELECT 
    sell_id,
    SUM(CASE WHEN selled = true THEN worth ELSE -worth END) AS total_profits
FROM sellers
GROUP BY sell_id
ORDER BY total_profits DESC
LIMIT 1;

方案二:兼容多用户并列最大值

如果需要把所有收益并列最高的用户都查出来,可以用子查询先找到最大收益值,再匹配对应的用户:

-- 先计算每个用户的总收益,存为临时结果集
WITH user_profits AS (
    SELECT 
        sell_id,
        SUM(CASE WHEN selled = true THEN worth ELSE -worth END) AS total_profits
    FROM sellers
    GROUP BY sell_id
)
-- 筛选出收益等于最大值的用户
SELECT sell_id, total_profits
FROM user_profits
WHERE total_profits = (SELECT MAX(total_profits) FROM user_profits);

原查询的问题说明

你之前的查询select sell_id, sum(worth), selled from sellers where(selled=true) group by sell_id, selled有两个问题:

  1. 只筛选了selled=true的卖出记录,完全没考虑买入的支出;
  2. GROUP BY里带了selled,会导致同一个用户的买卖记录被分成两组统计,没法得到合并后的总收益。

结果示例

假设你的数据计算后sell_id=51的总收益是2000且是最大值,查询结果会像这样:

sell_id | total_profits
---------------------------
51      | 2000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:15