2013-06-25 36 views
0

我正在寫一個查詢,我需要從基於AVG()聚合函數,條件選擇語句結果,使用平均聚合函數內如果第

,但在MySQL它給誤差錯誤代碼: 1111, 無效使用組功能

select 
if(avg(FLD_TKTS) > 1 and avg(FLD_TKTS) <= 2 , '1-2' , 0) as fld_avg_1_2, 
if(avg(FLD_TKTS) > 3 and avg(FLD_TKTS) <= 4 , '3-4' , 0) as fld_avg_3_4 
from tbl 
group by region; 

是有其他的方法來做到這一點?

+3

您可以顯示錶信息?查詢對我來說很好。 – KaeL

+1

查詢看起來不錯,必須用表格。 – sashkello

+0

不確定的MySQL,但在oracle或sql server中我們使用Case語句(因爲沒有if)這樣的一些事情Select(case when avg(FLD_TKTS)> 1 then avg (FLD_TKTS)else 0 end)作爲來自tbl的fld_avg按區域分組; –

回答

2

查詢:

select 
CASE WHEN avg(FLD_TKTS) > 1 and avg(FLD_TKTS) <= 2 THEN '1-2' 
    ELSE '0' END as fld_avg_1_2, 
CASE WHEN avg(FLD_TKTS) > 3 and avg(FLD_TKTS) <= 4 THEN '3-4' 
    ELSE '0' END as fld_avg_3_4 
from tbl 
group by region 
+0

謝謝..它的工作.. – sourcecode

1
select 
    region, 
    if(fld_avg > 1 and fld_avg <= 2, '1-2', 0) as fld_avg_1_2, 
    if(fld_avg > 3 and fld_avg <= 4, '3-4', 0) as fld_avg_3_4 
from 
(
    select 
    region, 
    avg(FLD_TKTS) fld_avg 
    from 
    tbl 
    group by 
    region 
) a; 
+0

但子查詢不是一個好的解決方案.. – sourcecode

+0

@sourcecode你爲什麼這麼認爲? – Tomalak

+0

子查詢不是相關的子查詢,所以應該非常高效。 – Kickstart

0

我覺得一個子查詢將是一個很好的解決方案:

SELECT 
    IF(avg_fld_tkts > 1 and avg_fld_tkts <= 2 , '1-2' , 0) as fld_avg_1_2, 
    IF(avg_fld_tkts > 3 and avg_fld_tkts <= 4 , '3-4' , 0) as fld_avg_3_4 
(
    SELECT avg(FLD_TKTS) AS avg_fld_tkts 
    from tbl 
    group by region 
) t1