错误代码:1111。尝试在IF条件下使用Max函数时无效使用组函数

时间:2016-02-24 03:28:50

标签: mysql sql

我有一个包含columns-category_id,start_range,end_range和百分位数的table_model表。

category_id属于varchar类型,例如C1,C2,C3 start_rangeend_range的值为float,例如-0.25至4.65

我正在尝试检查一定范围内的分数并返回相应的百分位数。

以下查询返回错误代码1111-无效使用组功能 -

SELECT max(IF(spm.start_range <= 1.19 AND spm.end_range >= 1.19, spm.percentile, IF(max(spm.end_range) < 1.19, 99, 0))) AS percentile
FROM category_model spm
WHERE spm.category_id = 'C1'

如果我用下面的查询替换它,它工作正常,但我无法检查边界条件(例如,分数落在最小start_range或max end_range之外)。

SELECT max(IF(spm.start_range <= 1.19 AND spm.end_range >= 1.19, spm.percentile, 0)) AS percentile
FROM category_model spm 
WHERE spm.category_id='C1'

有解决方法吗?我正在使用MySql版本5.2

2 个答案:

答案 0 :(得分:0)

不允许多个聚合函数组合。

使用子查询尝试这个:

SELECT max(IF(spm.start_range <= 1.19 AND spm.end_range >= 1.19, spm.percentile, IF((SELECT MAX(end_range) FROM category_model) < 1.19, 99, 0))) AS percentile
FROM category_model spm
WHERE spm.category_id = 'C1'

答案 1 :(得分:0)

使用sub-query;

SELECT 
    max(
        IF(
            spm.start_range <= 1.19 AND spm.end_range >= 1.19, 
            spm.percentile, 
            IF(x.max_end_range < 1.19, 99, 0)
        )
    ) AS percentile
FROM category_model spm
cross join (
    select max(end_range) max_end_range
    FROM category_model
    WHERE spm.category_id = 'C1'
) x
WHERE spm.category_id = 'C1'

注意: - 此处spm.category_id = 'C1'条件用于计算max_end_range如果这不是您想要的,则删除条件。