下级绩效mysql

文章介绍了如何在MySQL中通过递归查询处理具有层级关系的数据,例如BD关系网络,来计算每个层级的绩效。通过对Transaction表中的交易金额进行聚合,计算每个BD及其下属的总绩效。查询结果将展示每个BD的ID以及其整个团队的绩效总和。
摘要由CSDN通过智能技术生成

有个场景mysql:
现有张表四个字段: id 、name 、parent id(上级id) 、level (当前层级,最多5级),这张表是用来维护线下BD的关系。总共这些线下BD可以不断发展,从顶层往下最多5级。现针对这些BD来计算绩效,另有一张交易表,表里存储这些BD的id需求是: 假设我是一个顶层,我下面有个人A,A下面还有三级,算我的绩效时候,除了计算我自身之外,还有把我下面A及A下面的所有人的绩效聚合起来作为我的业绩,算A绩效的时候,也是要带上他本人及他下面所有人的绩效。

-- CREATE TABLE BD (
--   id INT PRIMARY KEY,
--   name VARCHAR(255),
--   parent_id INT,
--   level INT
-- );
-- CREATE TABLE Transaction (
--   BD_id INT,
--   amount DECIMAL(10, 2)
-- );
-- 
-- INSERT INTO BD (id, name, parent_id, level) VALUES
--   (1, '顶层', NULL, 1),
--   (2, 'A', 1, 2),
--   (3, 'B', 2, 3),
--   (4, 'C', 2, 3),
--   (5, 'D', 2, 3),
--   (6, 'E', 3, 4),
--   (7, 'F', 3, 4),
--   (8, 'G', 4, 4),
--   (9, 'H', 5, 4),
--   (10, 'I', 5, 4),
--   (11, 'J', 6, 5),
--   (12, 'K', 6, 5),
--   (13, 'L', 6, 5),
--   (14, 'M', 7, 5),
--   (15, 'N', 8, 5);
-- 
-- INSERT INTO Transaction (BD_id, amount) VALUES
--   (1, 1000),
--   (2, 500),
--   (3, 200),
--   (4, 300),
--   (5, 400),
--   (6, 100),
--   (7, 150),
--   (8, 250),
--   (9, 200),
--   (10, 300),
--   (11, 50),
--   (12, 100),
--   (13, 80),
--   (14, 70),
--   (15, 120);
SELECT
  temp_table.root_id,
  SUM(temp_table.performance) AS total_performance
FROM (
  WITH RECURSIVE hierarchy AS (
    SELECT BD.id, BD.name, BD.parent_id, 1 AS level, BD.id AS root_id
    FROM BD
    UNION ALL
    SELECT BD.id, BD.name, BD.parent_id, hierarchy.level + 1, hierarchy.root_id
    FROM BD
    JOIN hierarchy ON hierarchy.id = BD.parent_id
  )
  SELECT
    hierarchy.root_id,
    hierarchy.id,
    hierarchy.name,
    Transaction.amount AS performance
  FROM
    hierarchy
  JOIN
    `Transaction` ON hierarchy.id = `Transaction`.BD_id
  JOIN
    BD ON hierarchy.root_id = BD.id
) AS temp_table
GROUP BY
  temp_table.root_id
ORDER BY
  temp_table.root_id ASC;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值