如何在MySQL中获取COUNT()列的SUM()

时间:2014-09-10 04:26:29

标签: mysql count left-join

我有以下查询,尝试使用案例陈述

SELECT t.inst_id, t.inst_username, tcm.city_name,
SUM(CASE WHEN psb.pms_student_bucket_id IS NULL THEN 1 ELSE 0 END) AS not_assiged,
SUM(CASE WHEN COUNT(psb.pms_student_bucket_id) BETWEEN 1 AND 50 THEN 1 ELSE 0 END) AS '1-50',
SUM(CASE WHEN COUNT(psb.pms_student_bucket_id) > 50 THEN 1 ELSE 0 END) AS ' > 50'
FROM tbl_si_di t
JOIN tbl_city_master tcm ON tcm.city_id = t.city_ref_id
JOIN tbl_si_students tss ON tss.inst_ref_id = t.inst_id
LEFT JOIN pms_student_bucket psb ON psb.user_ref_id = tss.user_ref_id
GROUP BY t.inst_id;

当COUNT为'1-50'和'> 50'时,我需要pms_student_bucket_id列的SUM。现在这个查询是Invalid use of group function

如何在“pms_student_bucket_id”的COUNT上使用SUM等于/在mysql中的某个值之间?

1 个答案:

答案 0 :(得分:1)

你可以把它放在子查询中

SELECT inst_id, inst_username, city_name, 
    SUM(pms_student_bucket_id IS NULL ) AS not_assiged,
    SUM(num_bucket >=10 AND num_bucket <= 20) AS '10 - 20'
    SUM(num_bucket <= 50) AS '1-50',
    SUM(num_bucket > 50) AS ' > 50'
FROM
(   SELECT t.inst_id, t.inst_username, tcm.city_name,psb.pms_student_bucket_id,     
        COUNT(psb.pms_student_bucket_id) as num_bucket
    FROM tbl_si_di t
    JOIN tbl_city_master tcm ON tcm.city_id = t.city_ref_id
    JOIN tbl_si_students tss ON tss.inst_ref_id = t.inst_id
    LEFT JOIN pms_student_bucket psb ON psb.user_ref_id = tss.user_ref_id
    GROUP BY t.inst_id
)t1
GROUP BY inst_id;

请注意,您可以使用返回的布尔值来执行您想要的操作。也就是说,您不需要case语句,boolean值返回1或0,然后可以求和。