2015-06-18 90 views
0

我有一個類似的結構數據集婁聚集條件時,

fruit, value 
apple, 234 
apple, 2341 
pear, 3233 
grape, 323 
pear, 3234 
grap 1234 

我試圖找到一個範圍是在區間底部10%的數字的計數通過執行下面的查詢。 (查詢的最終目標是計算並查看Calc的範圍以10%的增量增加)我還有一個group by子句,因此我希望計數按水果進行分組並按這種方式進行聚合。貝婁是我試過的查詢

select fruit, count(case when (value <= (((max(value) - min(value)) * .1) + min(value))) then 1 end) 
from fruit_juice 
group by substring(fruit, 5, 5); 

回答

0

from子句中彙總表以獲得所需的限制。 Join這些結果反饋給查詢並使用這些值查詢:

select substring(fj.fruit, 5, 5), 
     sum(fj.value <= fmm.minv + (fmm.maxv - fmm.minv) * 0.1) 
from fruit_juice fj join 
    (select substring(fruit, 5, 5) as fruit5, 
      max(value) as maxv, min(value) as minv 
     from fruit_juice 
     group by substring(fruit, 5, 5) 
    ) fmm 
    on fmm.fruit5 = substring(fj.fruit, 5, 5) 
group by substring(fruit, 5, 5); 

請注意,您group by表達式應該select子句中匹配的表達式。

編輯:

我不知道在哪裏的substring()是從你的問題來了,所以這個版本中刪除:

select fj.fruit, sum(fj.value <= fmm.minv + (fmm.maxv - fmm.minv) * 0.1) 
from fruit_juice fj join 
    (select fruit, 
      max(value) as maxv, min(value) as minv 
     from fruit_juice 
     group by fruit 
    ) fmm 
    on fmm.fruit = fj.fruit 
group by fruit; 
+0

對不起糾正子是我忘了取出 – user2524994

+0

莫非你會更進一步,因爲我可以理解並告訴我如何做10%和20%的計數。另外爲什麼你在select語句中有一個sum子句?不應該是一個計數? – user2524994

+0

你也可以不總和布爾值,所以我不認爲你有什麼作品 – user2524994