我在一个非常大的查询中有一个子查询,必须执行以下操作
有一系列聚类
数组(数组(c1,c2),数组(c3,c4),数组(c5,c6),数组(c7,c8))
其中例如c1和c2是互补的,c3和c4也是..etc。 我有一个表状态:
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%,并且只有两者都有success_ratio< 50%然后只拿第一个。
这是否只能使用mysql查询实现(我不能使用查询结果,因为我想将它作为另一个大查询的子查询)?
即使你可以建议一个方法来做一个值得赞赏的方法。
答案 0 :(得分: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