0

我有 2 个表:users_item有 2 列user_id, item_id并且item_rates有 2 columns rate_item_id, rate

它们与 Foreign_Key on 连接users_item.item_id = item_rates.rate_item_id。我需要为给定的用户范围选择具有最大速率的 item_id。一个用户可以拥有很多项目。我的选择是:

SELECT MAX(rate), rate_item_id, user_id 
FROM users_item JOIN item_rates ON item_id = rate_item_id  
AND user_id in (2706,2979) GROUP BY user_id;    

但它以最大速率返回不对应的 item_id。在给定的示例中,选择必须只返回 2 行。有人可以帮忙吗。提前致谢。

4

2 回答 2

0

尝试分组user_id, rate_item_id

我很惊讶 MySql 没有给你一个错误,Oracle 会......

于 2013-06-19T12:24:36.397 回答
0

好的,我找到了你想要的..试试这个:

SELECT users_item.user_id, item_id, maxrate
FROM user_items 
JOIN item_rates ON users_item.item_id = item_rates.rate_item_id
JOIN (SELECT MAX(rate) AS maxrate, user_id 
      FROM users_item JOIN item_rates ON item_id = rate_item_id
      WHERE user_id in (1,2)
      GROUP BY user_id) AS maxis
ON users_item.USER_ID = maxis.USER_ID
WHERE item_rates.rate = maxrate

您需要子查询的原因是同一用户拥有的多个不同项目可能具有相同的费率,这可能是用户拥有的项目的最大费率。

于 2013-06-19T13:53:37.240 回答