2014-01-17 51 views
0

我在具有與簇的耦合的陣列查詢具有用於每行

陣列(陣列(C1,C2,以執行以下操作

一個非常大的查詢有一個子查詢兩個互補的值),陣列(c3,c4),陣列(c5,c6),陣列(c7,c8))

其中例如c1和c2是互補的,c3和c4以及..等等。 和我有一個表狀態:

id_state cluster successfull failed success_ratio 
    1  c1   4   0  100% 
    2  c2   1   9  10% 
    3  c3   0   4  0%   
    4  c4   1   1  50% 

注意到哪個羣集耦合於另一個使用上述陣列被確定。

而且我想最後的輸出有:

cluster successfull success_ratio       
     c1   4  100% (for the first pair) 
     c4   1  50%  (for the second) 

有沒有辦法做一個查詢,從每對夫婦只服用 與success_ratio的一個得到所有數據的success_ratio > 50%,只有兩者都有成功比例< 50%,那麼就拿第一個。

這是甚至可以實現僅使用mysql查詢(我不能使用查詢結果,因爲我想它作爲另一個大型查詢的子查詢)?

即使你只是建議一個方法來做的起點,將不勝感激。

+0

如果兩者都具有成功的口糧大於50%? –

+0

你能舉一個你想要的輸入和輸出的例子嗎? –

+0

@ gordon-linoff然後,我應該採取第一次成功率 –

回答

1

這聽起來像你只是想要每對的最大成功率。

select s.grp, max(success_ratio) 
from state s join 
    (select 'c1' as cluster, 1 as grp union all 
     select 'c2', 1 union all 
     select 'c3', 2 union all 
     select 'c4', 2 union all 
     select 'c5', 3 union all 
     select 'c6', 3 union all 
     select 'c7', 4 union all 
     select 'c8', 4 
    ) grps 
    on s.cluster = grps.cluster 
group by s.grp; 

如果你真的想用最好的成功行,然後使用子查詢:

select s.* 
from (select s.grp, 
     substring_index(group_concat(cluster order by success_ratio desc), ',', 1) as bestcluster 
     from state s join 
      (select 'c1' as cluster, 1 as grp union all 
      select 'c2', 1 union all 
      select 'c3', 2 union all 
      select 'c4', 2 union all 
      select 'c5', 3 union all 
      select 'c6', 3 union all 
      select 'c7', 4 union all 
      select 'c8', 4 
      ) grps 
      on s.cluster = grps.cluster 
     group by s.grp 
    ) b join 
    state s 
    on s.cluster = b.cluster 
+0

謝謝@ gordon-linoff,真的很有幫助的答案,指出我正確的方向 –