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

基于GROUP BY与HAVING的多表联查SQL需求:筛选仓库库存预警商品

解决库存不足商品的筛选问题

没问题,我来帮你实现这条需求的SELECT语句,同时拆解一下逻辑让你清楚每一步的作用:

最终SQL语句

SELECT 
    a.artNr AS 商品编号,
    w.ID AS 仓库ID,
    a.warning AS 预警阈值,
    SUM(ais.quantity) AS 当前库存总量
FROM 
    `Articles in stock` ais
INNER JOIN 
    Articles a ON ais.artID = a.ID
INNER JOIN 
    warehouse w ON ais.warehouseID = w.ID
GROUP BY 
    ais.artID, ais.warehouseID, a.artNr, a.warning, w.ID
HAVING 
    SUM(ais.quantity) <= a.warning;

逻辑拆解

  1. 表关联:

    • 用INNER JOIN把三张表关联起来:Articles in stock(缩写成ais方便书写)和Articles通过商品ID(artID = ID)关联,拿到商品的编号(artNr)和预警阈值(warning);
    • ais和warehouse通过仓库ID(warehouseID = ID)关联,拿到仓库的信息(这里示例中仓库表只有ID,所以取这个字段)。
  2. 分组求和:

    • 按artID(商品ID)和warehouseID(仓库ID)分组,这样就能统计同一商品在同一仓库的总库存(用SUM(ais.quantity)计算)。
  3. 筛选条件:

    • 用HAVING子句筛选出总库存小于等于预警阈值的记录,因为SUM()是聚合函数,不能用WHERE来筛选聚合后的结果,所以必须用HAVING。

示例数据测试说明

你提供的示例数据里,所有商品的仓库库存总和都大于对应的预警值,所以这条语句执行后不会返回任何结果。但如果某商品在某个仓库的库存总和满足<= warning的条件,就会被筛选出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:57:18