暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL题目4:计算房间内物品数量

SQL大数据开发 2021-04-19
854

    之前写了一道题目:题目4:计算设备的所有零件数量  

    大概的意思是这样 有张关系表 ,里面存放了房间内物品的种类和物品之间组成的关系及数量,比如房间内有两张桌子,三把椅子,每张桌子由五个木头块组成,最后让求的是这个房间内每种物品的数量,今天我把答案给大家写一下,不知道和你们想的一样不~

        写之前啰嗦两句,本来我都忘记这个题目了。结果今天有个同事正好碰到和这个题目一摸一样的场景,就想起来这个题了,我是用CTE做的,先放数据代码

    with t1 as 
    (
    select '房间' as product,'桌子' as fitting,2 as num from dual
    union all
    select '房间','椅子',3 from dual
    union all
    select '房间','镜子',3 from dual
    union all
    select '桌子','木头块',5 from dual
    union all
    select '镜子','木头块',5 from dual
    union all
    select '桌子','螺丝',6 from dual
    union all
    select '桌子','螺丝帽',8 from dual
    union all
    select '椅子','整个木头',6 from dual
    union all
    select '椅子','螺丝',2 from dual
    union all
    select '整个木头','木头块',3 from dual
    union all
    select '木头块','小木头块',2 from dual
    union all
    select '小铁片','钉子',2 from dual
    union all
    select '小铁片','铝片',3 from dual
    union all
    select '螺丝','大铁片',10 from dual
    union all
    select '螺丝','中铁片',10 from dual
    union all
    select '螺丝','小铁片',10 from dual
    )
    复制

        下面是答案代码:

      cte(product,fitting,num) as 
      (
      select product,fitting ,num from t1 where product = '房间'
      union all
      select t.product,t.fitting,t.num*c.num as num
      from t1 t inner join cte c on c.fitting = t.product
      )
      select fitting,sum(num) from cte group by fitting
      复制

          运行结果:

          这里我们求出来的是所有的物品的数量,但是我同事那里是只要最后一层的数量。就是组成物品的最小单位的数量。比如钉子,铝片这些。我当时是用子节点的所有物品minus了一下父节点的所有物品,判断出了哪些是最小种类,但是感觉性能不是很好,在这里大家有更好的想法可以直接和我联系,感谢大家~

          关于cte不懂的同学,也可以联系我,大家一起学习探讨!

          刚开始编写文章,很多地方都有不足,希望以后可以为大家贡献出更好的文章,谢谢大家!

          没有关注的也可以关注下公众号~再次感谢

                          


      最后修改时间:2021-04-19 17:17:05
      文章转载自SQL大数据开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论