我的产品排名不同。产品可能是超级组的成员(如Cream)。
product_id | supergroup | rank | other_info
1 | Cream | 3 | Eric
2 | Zep | 1 | Jimmy
3 | Zep | 4 | Jon Paul
4 | Cream | 3 | Jack
5 | Cream | 4 | Ginger
6 | Who | 4 | Roger
7 | Who | 5 | John
8 | Who | 3 | Pete
我希望获得每个组的最高产品排名,以及该产品ID的其他信息。排名不适用于组内排名。它们是适用于系统中所有产品的排名。因此,即使在同一组中,不止一种产品可能具有相同的等级。
编辑:修复" other_info"。我在那里有些胡言乱语。还添加了一行。结果应该从最高级别到最低级别。但是,它们也应仅包含每个product_id
中排名最高的supergroup
,以及匹配的other_info
。
product_id | supergroup | rank | other_info
2 | Zep | 1 | Jimmy
8 | Who | 3 | Pete
1 | Cream | 3 | Eric
我可以通过简单的查询来做到这一点吗?现有系统的查询已经涉及超组上的GROUP BY语句,而SELECT中没有聚合器。这导致组内的随机但连贯的行。修改查询以获得完整行的最简单方法是什么,但始终是每个超级组中排名最高的成员。
如果没有办法,那么:没有GROUP BY,这可能吗?
答案 0 :(得分:1)
SELECT t.*
FROM your_table t
JOIN (
SELECT MIN(product_id) as product_id #if there are multiple products with the same (min) rank in the same supergroup - get the one with lowest product_id
FROM your_table tt
JOIN (
SELECT supergroup, MIN(rank) as min_rank
FROM your_table
GROUP BY supergroup
) mr ON mr.supergroup = tt.supergroup AND mr.min_rank = tt.rank
GROUP BY tt.supergroup, tt.rank
) as mid ON mid.id.product_id = t.product_id
ORDER BY whatever_you_need_to
您需要(supergroup,rank)
上的索引才能有效运行。