在其他表格中选择max with group by

时间:2013-06-19 12:19:43

标签: mysql

我有2个表:users_item有2列user_id, item_iditem_rates有2 columns rate_item_id, rate

它们与users_item.item_id = item_rates.rate_item_id上的Foreign_Key相关联。我需要 为给定范围的用户选择具有最大费率的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的最大速率。在给定的示例中,select必须仅返回2行。有人可以帮忙吗?提前致谢。

2 个答案:

答案 0 :(得分:0)

尝试按user_id, rate_item_id

分组

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

答案 1 :(得分: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

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