2017-03-04 38 views
0

我已经搜索了很多,但没有其他问题与错误1111解决我的问题。 我的需求来算一些ID 下面的代码工作的不同电话号码:[HY000] [1111]组功能的使用无效

SELECT 
    a.id_borrow_application, 
    count(DISTINCT c.phone_no) CVG_CALL_OUT_COUNTS_6M 
FROM t_snow_borrow_application_id a 
    JOIN t_snow_call_mobile b 
    JOIN t_snow_call_record_201612 c ON 
            (
             a.id_borrow_application = b.id_borrow_application 
             AND b.id = c.id_call_mobile 
             ) 
WHERE c.call_type = 0 
GROUP BY a.id_borrow_application; 

但是,当我想写4个类似的查询一起,在标题 错误发生。

[HY000] [1111]无效使用组功能

SELECT 
    a.id_borrow_application, 
    sum(CASE WHEN call_type = 0 
    THEN count(DISTINCT c.phone_no) 
     ELSE 0 END) CVG_CALL_OUT_COUNTS_6M, 
    sum(CASE WHEN call_type = 0 AND c.days <= 30 
    THEN count(DISTINCT c.phone_no) 
     ELSE 0 END) CVG_CALL_OUT_COUNTS_1M, 
    sum(CASE WHEN call_type = 1 
    THEN count(DISTINCT c.phone_no) 
     ELSE 0 END) CVG_CALL_IN_COUNTS_6M, 
    sum(CASE WHEN call_type = 1 AND c.days <= 30 
    THEN count(DISTINCT c.phone_no) 
     ELSE 0 END) CVG_CALL_IN_COUNTS_1M 
FROM t_snow_borrow_application_id a 
    JOIN t_snow_call_mobile b 
    JOIN t_snow_call_record_201612 c ON 
            (
            a.id_borrow_application = b.id_borrow_application 
            AND b.id = c.id_call_mobile 
             ) 
GROUP BY a.id_borrow_application; 

难道我就写4个查询?

回答

1

您正在嵌套MySQL中不允许的聚合函数。

对于不同的条件,您实际上不需要计数不同的phone_nos的求和函数。取出案例外的count (distinct,并删除sum函数和caseelse子句。

试试这个:

select a.id_borrow_application, 
    count(distinct case when call_type = 0 then c.phone_no end) CVG_CALL_OUT_COUNTS_6M, 
    count(distinct case when call_type = 0 
       and c.days <= 30 then c.phone_no end) CVG_CALL_OUT_COUNTS_1M, 
    count(distinct case when call_type = 1 then c.phone_no end) CVG_CALL_IN_COUNTS_6M, 
    count(distinct case when call_type = 1 
       and c.days <= 30 then c.phone_no end) CVG_CALL_IN_COUNTS_1M 
from t_snow_borrow_application_id a 
join t_snow_call_mobile b 
join t_snow_call_record_201612 c on (
     a.id_borrow_application = b.id_borrow_application 
     and b.id = c.id_call_mobile 
     ) 
group by a.id_borrow_application; 
相关问题