weixin_46314775 2023-02-20 10:00 采纳率: 28.6%
浏览 87
已结题

mysql递归分组查询统计产品使用总次数

需要实现统计所有的父节点下面所有子节点产品之和
想实现比如效果

img


A应用 下所有子节点调用总次数
B应用 下所有子节点调用总次数


涉及3张表
一个平台应用表,一个平台下产品表,一个应用明细表
表明分别为:basic_platform,basic_introduce,logs_storage

img

img

img

麻烦问下,这种需要怎么实现,希望知道的各位告知呢。万分感激,请不要复制粘贴其他答案来凑数,需要正确的

  • 写回答

3条回答 默认 最新

  • 云储储 2023-02-20 14:42
    关注

    首先先上结果:
    其中平台应用表为 t1,平台下产品表为 t2, 应用明细表为 t3

    select temp2.platform_id AS '平台应用id',t1.platform_name AS '平台应用名称',SUM(temp2.total_piece) AS '该平台下所有产品的扣除总次数之和'
    from t1 
    inner join (
            select t2.platform_id AS platform_id,t3.app_key AS app_key,SUM(t3.piece) AS total_piece
            from t2
            inner join t3 on t2.app_key = t3.app_key 
            group by t3.app_key,t2.platform_id
    ) temp2 on t1.platform_id = temp2.platform_id
    group by temp2.platform_id,t1.platform_name
    
    

    解题思路:

    
    -- 1、表名明确  
    -- 首先确定 平台应用表为 t1,平台下产品表为 t2, 应用明细表为 t3
    
    -- 2、表关系明确
    -- 其中 t2 平台下产品表中的 platform_id 与 t1 平台应用表中的平台id 为关联关系
    -- t3 与 t2 中的 app_key 为关联字段
    
    -- 3、t1 与 t2 为一对多,t2 与 t3 是一对多
    
    -- 开始解题
    -- 首先计算出单个产品的 扣除总次数
    select app_key,SUM(piece) AS total_piece FROM t3 group by app_key;
    
    -- 将上方的单个产品的 扣除总计数关联到 t2 表中
    select t2.id,t2.platform_id,t2.app_key,temp1.total_piece
    from t2
    inner join (select app_key,SUM(piece) AS total_piece FROM t3 group by app_key) temp1 on t2.app_key = temp1.app_key
    
    -- 上方为拆分想法思路方便理解所写,其实我们可以将上面两步操作合起来,采用下面这种方式一样能够达到同样效果
    
    select t2.platform_id,t3.app_key,SUM(t3.piece) AS total_piece
    from t2
    inner join t3 on t2.app_key = t3.app_key 
    group by t3.app_key,t2.platform_id
    
    -- 如上我们就得到了一张具有 t2.platform_id 与 根据 t3 计算出来的单个产品的扣除总次数数据表
    -- 下面我们将此数据表做为 临时数据表temp2 与 t1 关联得到最终的结果,具体操作如下
    
    select temp2.platform_id AS '平台应用id',t1.platform_name AS '平台应用名称',SUM(temp2.total_piece) AS '该平台下所有产品的扣除总次数之和'
    from t1 
    inner join (
            select t2.platform_id AS platform_id,t3.app_key AS app_key,SUM(t3.piece) AS total_piece
            from t2
            inner join t3 on t2.app_key = t3.app_key 
            group by t3.app_key,t2.platform_id
    ) temp2 on t1.platform_id = temp2.platform_id
    group by temp2.platform_id,t1.platform_name
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月28日
  • 已采纳回答 2月20日
  • 修改了问题 2月20日
  • 赞助了问题酬金15元 2月20日
  • 展开全部

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来