如何在MySql中查找具有最高优先级的行?

时间:2014-05-14 20:29:26

标签: mysql sql

[对不起,如果这是转贴]

我有几种产品。它们可以属于多个组,即一个产品可以属于多个组。每个小组都有优先权。我有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.

任何帮助或指示赞赏。谢谢大家。

1 个答案:

答案 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;