MySQL:从每个组中选择最佳,但不重复

MySQL:从每个组中选择最佳,但不重复,mysql,group-by,unique,distinct,Mysql,Group By,Unique,Distinct,我必须在每个类别中选择最佳记录,如 ID| Category_Id | Item_Id | Price 1 | 1 | 1 | 10 2 | 1 | 1 | 7 3 | 1 | 2 | 8 4 | 1 | 2 | 5 5 | 2 | 1 | 9 6 | 2 | 1 | 6 7 | 2 |

我必须在每个类别中选择最佳记录,如

ID| Category_Id | Item_Id | Price
1 | 1           | 1       | 10
2 | 1           | 1       | 7
3 | 1           | 2       | 8
4 | 1           | 2       | 5
5 | 2           | 1       | 9
6 | 2           | 1       | 6
7 | 2           | 2       | 3
8 | 2           | 2       | 8
9 | 3           | 1       | 5

SELECT * FROM (
  SELECT * FROM `products` ORDER BY price DESC
) AS r GROUP BY category_id
结果我得到:

ID | CATEGORY_ID | ITEM_ID | PRICE
1  | 1           | 1       | 10
5  | 2           | 1       | 9
9  | 3           | 1       | 5
我必须修改查询以仅返回唯一的ITEM_ID。例如,如果为类别1选择了项目1,则无法为类别2选择该项目。所以应该为它选择下一个匹配项。所以我应该得到:

ID | CATEGORY_ID | ITEM_ID | PRICE
1  | 1           | 1       | 10
8  | 2           | 2       | 8
9  | 3           | 1       | 5 
类别3仅包含一个项目1,以前用于类别1。但复杂性在于我们不能跳过任何类别。因此,如果没有剩余的ID,它必须开始使用已经使用的条目ID

谁能帮忙

UPD:好吧,我知道它太复杂了。也许我可以简化我的问题,选择非重复项目ID如何,不必担心跳过的类别?例如:

ID | CATEGORY_ID | ITEM_ID | PRICE
1  | 1           | 1       | 10
8  | 2           | 2       | 8
9  | 3           | 1       | 5 

我认为MySQL不可能满足您的需求。不过,一个简单的解决方案是在多个查询中执行。假设你想在你的页面上有5张图片

伪代码:

SELECT * FROM yourTable WHERE Price = (SELECT MAX(Price) FROM yourTable);
save category_id and item_id in an array;
save everything else what you need for display anywhere;
loop over the array
   SELECT * FROM yourTable WHERE Price = (SELECT MAX(Price) FROM yourTable WHERE category_id NOT IN (/*insert used category_ids here*/) AND item_id NOT IN (/*insert used item_ids here*/));
   save category_id and item_id in an array;
   save everything else what you need for display anywhere;
end loop
present whatever you need on your page

这里有一个例子:我不知道如何查询预期的结果,所以我没有任何东西可以作为我尝试的例子。预期结果出现在问题的最后一个代码块中。我认为您应该扩展示例数据,以涵盖类别\u id 4必须使用项目\u id 3的情况,因为项目\u id 1和2已被类别\u id 1和2获取。哦,我不认为单用SQL就可以轻松解决这个问题。考虑一个应用层的解决方案,一个更大的数据集和预期的结果样本可以帮助这一点。我认为关于物品id的规则是最不清楚的。也许可以解释一下你想要完成什么?肖恩·拉金,实际上我应该做一个有分类列表的页面。每个类别都应以最畅销产品的形象呈现。但只要一个产品可能属于多个类别,我们就会在列表中看到一些类似的图片。目标是防止页面上出现类似的图像。