如何从同一个表中得到所有计数的总和?

xu3bshqb  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(369)

我正在使用yii2和activerecords。我在找一个部门的种族分布。我有一个查询,将员工分组到他们的部落,并根据性别进一步分组,并返回每个案例中的总数。
最终结果应该类似于这张照片:

少数民族小计是将该部门所有部落的总数相加得出的。到目前为止,我已经掌握了每个部门所有部落的总数。我怎样才能把这些总数加起来得到民族小计呢?
我的代码:

$query = StaffEmploymentListView::find()
    ->select([

        'DEPT_NAME',
        'TRIBE_NAME', 
        "COUNT(CASE WHEN GENDER='MALE' THEN 1 END) AS MALE_COUNT",        
        "COUNT(CASE WHEN GENDER='FEMALE' THEN 1 END) AS FEMALE_COUNT",
        "COUNT(TRIBE_NAME) AS TRIBE_COUNT",
    ])
    ->groupBy(['DEPT_NAME','TRIBE_NAME']);

原始sql答案也是受欢迎的。

qlvxas9a

qlvxas9a1#

我不熟悉yii,但一般来说你可以用它 + 添加值,因此您的选择标准如下 count(...) + count(...) 将选择这两个计数之和。

ig9co6j1

ig9co6j12#

select t.DEPT_NAME,
   SUM(CASE WHEN GENDER = 'MALE' OR GENDER = 'FEMALE' THEN 1 END) as SUM,
   tt.MALE_COUNT,
   tt.FEMALE_COUNT,
   tt.TRIBE_COUNT,
   tt.TRIBE_NAME from 'StaffEmploymentListView' t
     left join (
select DEPT_NAME,
TRIBE_NAME,
       SUM(CASE WHEN GENDER = 'MALE' THEN 1 END) as MALE_COUNT,
       SUM(CASE WHEN GENDER = 'FEMALE' THEN 1 END) as FEMALE_COUNT,
       count(TRIBE_NAME)                      as TRIBE_COUNT
from 'StaffEmploymentListView' t
group by DEPT_NAME, TRIBE_NAME) tt on t.DEPT_NAME = tt.DEPT_NAME group by t.DEPT_NAME, tt.MALE_COUNT, tt.FEMALE_COUNT, tt.TRIBE_COUNT, tt.TRIBE_NAME;

这也许能帮你,我用postgresql平台

相关问题