[对不起,如果这是转贴]
我有几种产品。它们可以属于多个组,即一个产品可以属于多个组。每个小组都有优先权。我有2个表,其中一个具有product_id-group_id映射,另一个具有group_id-priority映射。我需要一个product_id-group_id结果,该结果返回具有最高优先级的product_id的组。
e.g。 来源表:
table1 = product_id | group_id table2 = group_id | priority
1 | g1 g1 | 1
1 | g2 g2 | 2
2 | g1 g3 | 3
2 | g2
2 | g3
期望的结果:
product_id | group
1 | g2 # because out of groups g1 and g2, g2 has more priority
2 | g3 # 3 = max_priority among groups g1, g2 and g3
我需要一个 SQL查询,它会返回此结果。如果你们可以提出一个查询,它会返回只有一个所需product_id列表的映射,那会更好。
我们正在使用MySQL 5.5。独特的product_ids将是< 1m,团体不会超过1000.
任何帮助或指示赞赏。谢谢大家。
答案 0 :(得分:1)
您可以使用substring_index()
和group_concat()
:
select t1.product_id,
substring_index(group_concat(t1.group_id order by t2.priority desc), ',', 1) as group_id
from table1 t1 join
table2 t2
on t1.group_id = t2.group_id
group by t1.product_id;