You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理数据,实现按所选最低组织层级统计结果?

组织层级筛选统计问题

需求说明

前端设有4个下拉框,对应公司组织层级:Groups > Units > Departments > Teams

  • 用户可单选某一分组,后续下拉框仅展示该分组下的下级选项;也可多选(比如同时选择Group1、Group2),展示对应所有下级选项
  • 用户可自由选择任意层级的选项,最终需要按每组选择的最低层级统计结果数量

示例数据

idusernamegroupunitdepartmentteam
1user1g1u1d1t1
2user2g1u1d1t2
3user3g3u6d12t30
4user4g25u54d70t88

当前实现与疑问

目前通过Query Builder构建查询获取具体结果,比如用户选择g1>u1>d1和g25>u54>d70>t88时,代码如下:

foreach ($data as $row) {
    $myQuery->orWhere(function($query) use ($filter) {
        foreach ($filter as $column => $value) {
            $query->where($column, '=', $value);
        }
    });
}

生成的SQL:

SELECT * FROM table
WHERE (group='g1' AND unit='u1' AND department='d1')
OR (group='g25' AND unit='u54' AND department='d70' AND team='t88')

但需求是返回每组选择的统计数量而非具体结果,尝试用UNION ALL实现:

SELECT group
     , unit
     , department
     , NULL as team
     , COUNT(*) AS rows
  FROM table
 WHERE group='g1' 
   AND unit='u1' 
   AND department='d1'
GROUP
    BY group
     , unit
     , department
UNION ALL
SELECT group
     , unit
     , department
     , team
     , COUNT(*) AS rows
  FROM table
 WHERE group='g25' 
   AND unit='u54' 
   AND department='d70' 
   AND team='t88'
GROUP
    BY group
     , unit
     , department
     , team

现有疑问:

  1. 能否通过Query Builder实现上述UNION ALL的统计逻辑?
  2. 当前的数据组织或查询构建方式是否合理?是否需要调整数据结构?
  3. 有没有更优的其他实现方案?

内容的提问来源于stack exchange,提问作者pileup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:25:16