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

SQL中如何关联数值列与字符列以筛选买卖数量符合要求的记录

解决方案

方法1:GROUP BY + 条件聚合(最常用,全SQL dialect兼容)

如果只需要输出符合「买入总量>卖出总量」的产品及对应统计值,用这种方法性能最高:

SELECT 
  Product,
  SUM(CASE WHEN LOWER(Action) = 'buy' THEN Quantity ELSE 0 END) AS total_buy,
  SUM(CASE WHEN LOWER(Action) = 'sell' THEN Quantity ELSE 0 END) AS total_sell
FROM 你的表名
GROUP BY Product
HAVING SUM(CASE WHEN LOWER(Action) = 'buy' THEN Quantity ELSE 0 END) > SUM(CASE WHEN LOWER(Action) = 'sell' THEN Quantity ELSE 0 END)

说明:

  • 用LOWER()是为了兼容Action字段大小写不统一的情况,比如样例里的首字母大写"Buy",如果你的字段值格式完全统一可以去掉该函数
  • 如果需要筛选特定产品,在GROUP BY前加WHERE Product = '目标产品名'即可
  • 样例表测试该语句会返回abc产品,对应total_buy=10、total_sell=9,符合需求

方法2:窗口函数(适合保留原始交易明细的场景)

如果需要返回符合条件的产品的所有原始交易记录,用该方法:

SELECT * FROM (
  SELECT 
    *,
    SUM(CASE WHEN LOWER(Action) = 'buy' THEN Quantity ELSE 0 END) OVER (PARTITION BY Product) AS total_buy,
    SUM(CASE WHEN LOWER(Action) = 'sell' THEN Quantity ELSE 0 END) OVER (PARTITION BY Product) AS total_sell
  FROM 你的表名
) t
WHERE total_buy > total_sell

说明:该语句会返回abc产品对应的2条原始交易记录,同时附带该产品的总买卖量字段。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:03