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

MySQL技术问题:如何筛选同时含BUY、SELL且状态为FILLED的product_id

解决方案:查询同时存在已成交买卖记录的商品ID

没问题,我来帮你搞定这个SQL查询需求。我们的目标是找出那些同时拥有已成交(FILLED)的买入(BUY)和卖出(SELL)操作的product_id,下面提供两种实用的实现方式:

方法一:GROUP BY + HAVING 分组筛选

这是最简洁高效的方法,适合大多数场景:

SELECT product_id
FROM orderlist
WHERE sell_state = 'FILLED'
GROUP BY product_id
HAVING COUNT(DISTINCT sell_type) = 2;

逻辑解释:

  1. 先通过WHERE sell_state = 'FILLED'过滤出所有已成交的订单记录
  2. 按product_id分组,把同一个商品的所有成交记录归为一组
  3. 用COUNT(DISTINCT sell_type) = 2判断该组是否同时包含BUY和SELL两种操作类型(因为sell_type只有这两个可选值,数量为2就代表两种都存在)

方法二:自连接查询

如果需要更灵活的条件扩展(比如后续要加其他过滤规则),可以用自连接的方式:

SELECT DISTINCT o1.product_id
FROM orderlist o1
INNER JOIN orderlist o2 
  ON o1.product_id = o2.product_id
WHERE o1.sell_state = 'FILLED' 
  AND o1.sell_type = 'BUY'
  AND o2.sell_state = 'FILLED' 
  AND o2.sell_type = 'SELL';

逻辑解释:

  1. 将订单表自连接,把同一个product_id下的记录关联起来
  2. 分别指定两个表的条件:一个是已成交的买入记录,另一个是已成交的卖出记录
  3. 用DISTINCT去重,避免同一个商品ID被多次返回

小提示:

  • 如果你的表中同一个商品的同类型成交记录很多,方法一的效率会更高,因为它只统计类型的唯一性,不关心记录数量
  • 方法二更直观,适合需要对买卖记录分别添加额外过滤条件的场景(比如限定成交时间范围)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:30:14