我是蒻鸡 2021-12-18 19:43 采纳率: 39.1%
浏览 80
已结题

select跨表查询之分表汇总后联合显示数据如何处理?

img

对于数据的要求,请见上图,左侧为两个表,右侧为查询输出的语言,可能描述的混乱,我随时在线。

PS,感谢一楼的分析,能否提供一个在sqlitespy的解决方案,谢谢。

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2021-12-18 20:39
    关注

    在两张表中都有可能关联数据缺失的情况下,如果要让数据不会由于关联而遗漏,需要使用full join,并且对select的字段做判断为空的处理,另外就是对除数为0的处理。
    以下是在oracle数据库中的写法,其他数据库可能有些函数名不一样,但思路都是一样的

    select nvl(a.id, b.id) id,
           sum(nvl(a.numb, 0)) yonggongshu,
           sum(nvl(b.numb, 0)) zichanshu,
           decode(sum(nvl(a.numb, 0)),
                  0,
                  null,
                  sum(nvl(b.numb, 0)) / sum(nvl(a.numb, 0))) pinjun
      from (select * from book1 a where a.leibie in ('中层', '临时工')) a
      full join (select * from book2 b where b.zichan in ('房屋', '门面')) b
        on a.id = b.id
     group by nvl(a.id, b.id)
    

    我手上目前没有sqlite,关于full join 的替代方式可以在网上搜一下,当然针对你这个问题有另外一种方式,无需join

    
    select id,
           sum(case when t= 'book1' then sum_numb else  0 end ) yonggongshu,
           sum(case when t= 'book2' then sum_numb else  0 end) zichanshu,
           case 
             when 
               sum(case when t= 'book2' then sum_numb else  0 end)=0 then null 
             else 
                  sum(case when t= 'book1' then sum_numb else  0 end) /
                  sum(case when t= 'book2' then sum_numb else  0 end) 
             end pinjun
      from (select id, 'book1' t, sum(numb) sum_numb
              from book1 a
             where a.leibie in ('中层', '临时工')
             group by id
            union all
            select id, 'book2' t, sum(numb) sum_numb
              from book2 b
             where b.zichan in ('中层', '临时工')  
             group by id)
     group by id
    

    搜了下,sqlite好像不支持decode,所以改成case when了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月26日
  • 已采纳回答 12月18日
  • 赞助了问题酬金 12月18日
  • 修改了问题 12月18日
  • 展开全部

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分