1

对不起,如果我问这个,也许它有一个简单的解决方案,但我现在已经摸索了三天,我找不到一个好的解决方案。

我有两张表,一张定义“总计”,另一张定义“详细信息”。

Table_Totals

|item_id|user_rating| rating_count|
| 1     |      5.000|            5|
| 2     |      2.000|            3|
| 3     |      1.000|            5|
| 4     |      3.000|            2|
| 5     |      4.000|            8|

我可以通过此查询轻松获得每个 item_id 的“排名”:

SELECT uo . * , (
     SELECT COUNT( * ) 
        FROM Table_Totals ui
        WHERE (ui.user_rating, ui.item_id) >= ( uo.user_rating, uo.item_id )
        ) AS rank
        FROM Table_Totals uo
    WHERE item_id = 3

所以,我得到了这个(全球排名):

|item_id|user_rating| rating_count|rank|
| 3     |      1.000|            5|   5|

现在,我也有这张表(定义“详细信息”):

Table_Details

|item_id|category| players|
| 1     |  arcade|     113|
| 2     |     RPG|      31|
| 3     |  arcade|     522|
| 4     |  arcade|     100|
| 5     |  MMORPG|      82|

我的问题是:如何获得 item_id BY 类别的排名?我怎样才能加入这两张桌子并得到这样的东西?(记住:item_id.Table_Totals = item_id.Table_Details)。

“街机类别”的 IE 排名:

|item_id|category| rank|
| 1     |  arcade|    1|
| 3     |  arcade|    3|
| 4     |  arcade|    2|

完成类似事情的最佳方法是什么?

在此先感谢大家!

4

1 回答 1

1

假设一对一的关系,并使用类似这样的用户变量(未测试):-

SELECT a.item_id, a.category, @rank:=@rank + 1 as rank
FROM Table_Details a
INNER JOIN Table_Totals b
ON a.item_id = b.item_id
CROSS JOIN (SELECT @rank:=0) Sub1
WHERE category = 'arcade'
ORDER BY b.user_rating DESC
于 2013-10-23T10:44:50.667 回答