SQL Query根据Parent获取子用户数量的总和

时间:2016-06-29 12:26:42

标签: mysql

我正在尝试编写MySQL查询,

AIM:按月收集数据

MAY    20000    //sum of total amount earned by team (me and children alloted to my team)
June   23432
July   34488

我有一张名为foadc_invoice的表格。其中我有一个外键名user_id

以下是我foadc_invoice的样子:

enter image description here

现在你可以看到我有user_id所以在我的foadc_users表中我有这样的字段结构:

enter image description here

在上表中,我们在idunder_id之间建立了父子关系。

现在我可能在父母的孩子下面有多个孩子,这可以是一个无限的树。 我想计算total月份指定父级的整个子树。

我试图在MySQL / Eloquent中这样做。但对于这个我也可以使用原始查询。我将转换为Eloquent。

根据您的建议,结果如下: enter image description here

2 个答案:

答案 0 :(得分:1)

我的sql中没有CTE,因此我们必须使用子查询。

如果只有两个级别(即)  算法...

如果没有父母认为自己是 parentID ,则首先为每个人找到其父母的第1步。

一次又一次地重复相同步骤(如果最大高度为4然后是4次)。

现在,您将拥有子ID和相应的顶级父级,并使用foadc_invoice和sum(ammount)和parentID分组。

第1步的2级样本

 SELECT   p.id as id ,  coalesce( c.id ,p.id )as under_id  FROM      foadc_users p  LEFT JOIN foadc_users c    ON  p.id =c.under_id

步骤1的3级样本

  SELECT     p.id as id ,  coalesce( c.id ,p.id )as under_id   
      FROM 

             (SELECT   p.id as id , coalesce( c.id ,p.id )as under_id  FROM foadc_users p LEFT JOIN foadc_users c  ON  p.id =c.under_id) p
  LEFT JOIN foadc_users c
   ON  p.id =c.under_id

答案 1 :(得分:0)

试试这个

选择fu.name,date_format('validafrom','%M'),总和(金额)来自foadc_invoice fi left outer join foadc_users fu on fu.id = fi.user_id group by fu.name,date_format('validafrom ','%M')