美文网首页
DWB商品明细宽表建立之商品分类问题

DWB商品明细宽表建立之商品分类问题

作者: Eqo | 来源:发表于2022-05-20 20:24 被阅读0次
  • 背景介绍

商品分类的业务解读.png

在提交商品的种类的时候,一般会有三个种类 大中小 是下钻类型,
正常情况:每个商品都会提交到小类当中
非正常情况:每个商品插入的时候,大类,中类,小类都有 情况很复杂

需求查出每个商品的所属小类,中类,大类

商品分类理论和实际差距考量--sql技术实现.png image.png

商品明细宽表主要有一下组成

  • 核心表是dim_goods 记录了商品的信息 id store_class_id(商品分类id)
  • 商品分类表 dim_goods_class 主要字段 (id name level pid)
    -品牌表 dim_brand 记录了商品的品牌名称

构建商品明细表时候,我们需要的是3类结果:商品小类、商品中类、商品大类。
因此在编写join的时候,我们需要关联3次,实际中的join情况因为分为下面3种:
==如果level=3,才会关联到level=2 ,再去关联level=1==
==如果level=2,关联到level=1,结束==
==如果level=1,结束==
结束指的是,已经到大类级别了,没有parent_id了。就是执行join,结果也是为空。
这样导致的结果是:查询出来的3级分类会形成==错位==。如:
一个商品level=2,只能查询出来中类、大类,但是根据上述join的方式,却把
中类当成了小类,大类当成了中类,把null当成了大类。
那么==在查询结果取值返回的时候,一定要进行条件判断了,使用case when语句==。避免错误。

核心代码

--商品小类 如果class1.level=3,说明这个商品第一级就是小类
    CASE class1.level WHEN 3
        THEN class1.id
        ELSE NULL
        END as min_class_id,
    CASE class1.level WHEN 3
        THEN class1.name
        ELSE NULL
        END as min_class_name,
    --商品中类  如果class1.level=2,说明这个商品第一级就是中类
    CASE WHEN class1.level=2
        THEN class1.id
        WHEN class2.level=2
        THEN class2.id
        ELSE NULL
        END as mid_class_id,
    CASE WHEN class1.level=2
        THEN class1.name
        WHEN class2.level=2
        THEN class2.name
        ELSE NULL
        END as mid_class_name,
    --商品大类  如果class1.level=1,说明这个商品第一级就是大类
    CASE WHEN class1.level=1
        THEN class1.id
        WHEN class2.level=1
        THEN class2.id
        WHEN class3.level=1
        THEN class3.id
        ELSE NULL
        END as max_class_id,
    CASE WHEN class1.level=1
        THEN class1.name
        WHEN class2.level=1
        THEN class2.name
        WHEN class3.level=1
        THEN class3.name
        ELSE NULL
        END as max_class_name,

相关文章

网友评论

      本文标题:DWB商品明细宽表建立之商品分类问题

      本文链接:https://www.haomeiwen.com/subject/qrdtprtx.html