gpt4 book ai didi

MySQL:从每组中选择最好的,但不重复

转载 作者:行者123 更新时间:2023-11-30 23:09:23 25 4
gpt4 key购买 nike

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

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

最佳答案

我认为 (My)SQL 无法满足您的需求。不过,一个简单的解决方案是在多个查询中执行此操作。假设您想在页面上显示 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

关于MySQL:从每组中选择最好的,但不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com