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

使用Derby SQL计算直方图值 统计各SKU数对应周转箱频次

Derby实现周转箱SKU数量直方图统计

现有基础信息

  • 业务表:totecontents,存储周转箱与SKU的存放对应关系
    • 字段ToteID:周转箱唯一标识
    • 字段SKU:库存保有单位编号
  • 业务规则:单个周转箱最多存放6个SKU
  • 单箱SKU数查询基础语句:
select toteid, count(*) as qtypertote
from totecontents 
group by toteid;

需求说明

需要返回直方图专用统计结果,包含两列:

  • SkuCount:1到6的整数,代表单个周转箱内存放的SKU数量
  • Occurences:对应该SKU数量的周转箱总次数,计数为0的SkuCount也必须展示对应行

原有尝试的嵌套分组语句存在缺陷:仅会返回实际存在的SKU计数对应的结果,缺失0计数行,无法满足需求。

正确实现SQL

Derby没有内置生成连续序列的函数,因此通过虚表sysibm.sysdummy1手动构造1-6的固定序列,再左关联实际统计结果,保证0计数行不丢失:

SELECT
    seq.SkuCount,
    COALESCE(stat.Occurences, 0) AS Occurences
FROM (
    -- 生成1-6的连续SkuCount序列
    SELECT 1 AS SkuCount FROM sysibm.sysdummy1
    UNION ALL SELECT 2 FROM sysibm.sysdummy1
    UNION ALL SELECT 3 FROM sysibm.sysdummy1
    UNION ALL SELECT 4 FROM sysibm.sysdummy1
    UNION ALL SELECT 5 FROM sysibm.sysdummy1
    UNION ALL SELECT 6 FROM sysibm.sysdummy1
) seq
LEFT JOIN (
    -- 统计实际存在的各SKU数对应的周转箱量
    SELECT
        qtypertote AS SkuCount,
        COUNT(*) AS Occurences
    FROM (
        SELECT ToteID, COUNT(*) AS qtypertote
        FROM totecontents
        GROUP BY ToteID
    ) tote_stat
    GROUP BY qtypertote
) stat
ON seq.SkuCount = stat.SkuCount
ORDER BY seq.SkuCount;

逻辑说明

  • 用UNION ALL搭配Derby内置虚表生成1-6的固定枚举值,不需要依赖额外业务表
  • 左连接(LEFT JOIN)保证1-6的每个SkuCount都会出现在最终结果里,不会因为实际没有对应周转箱就丢失行
  • COALESCE函数将关联不到数据产生的空值转换为0,符合0计数展示要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:48:16