2016-02-24 64 views
-1

我有一個帶有category_id,start_range,end_range和percentile列的category_model表。錯誤代碼:1111.在IF條件下嘗試使用Max函數時,組函數無效使用

category_id類型varchar例如, C1,C2,C3 start_rangeend_rangefloat值,例如, -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' 

如果我用下面的查詢替換它,它工作正常,但我無法檢查的邊界條件(例如,分數超出min 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

對MAX()進行第二次嵌套調用的條件是什麼? –

+0

我已經爲該問題添加了更多信息。 – sravtej

回答

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' 
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
如果這不是你想要什麼,然後刪除的條件。

相關問題