我有一个包含columns-category_id,start_range,end_range和百分位数的table_model表。
category_id
属于varchar
类型,例如C1,C2,C3
start_range
和end_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
答案 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
如果这不是您想要的,则删除条件。