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

如何获取未被Buyers表Top3采购者订购的Beer表啤酒数据?

解决方案:找出未被Top3采购者订购的啤酒

核心思路

先确定按总采购量排序的Top3采购主体,再找出这些采购者订购过的所有啤酒,最后从Beer表中排除这些啤酒,得到目标结果。

实现SQL(SQL Server环境)

-- 第一步:计算每个采购主体的总采购量,筛选Top3采购者
WITH TopBuyers AS (
    SELECT TOP 3 
        PubId, 
        StoreId,
        SUM(Quantity) AS TotalQuantity
    FROM dbo.Buyers
    GROUP BY PubId, StoreId
    ORDER BY TotalQuantity DESC
)
-- 第二步:从Beer表中排除Top3采购者订购过的啤酒
SELECT 
    BeerId
FROM dbo.Beer br
WHERE NOT EXISTS (
    SELECT 1
    FROM dbo.Buyers b
    JOIN TopBuyers tb ON b.PubId = tb.PubId AND b.StoreId = tb.StoreId
    WHERE b.BeerId = br.BeerId
);

原查询无结果的常见原因排查

  • 错误识别采购主体:若原查询用BuyId(单次采购记录ID)作为采购者标识分组,会导致每个采购记录单独统计,无法得到正确的Top3采购主体。
  • NOT IN的NULL陷阱:若原查询用NOT IN且子查询返回的BeerId包含NULL值,SQL中任何值与NULL比较都会返回UNKNOWN,最终导致查询无结果,推荐用NOT EXISTS替代。
  • 未去重订购记录:Top3采购者可能多次订购同一款啤酒,若未对订购的啤酒ID去重,可能导致排除逻辑出错。

执行上述SQL后,即可得到预期的BeerId=4和BeerId=5。

内容的提问来源于stack exchange,提问作者Sven Marenković

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:55:19