很抱歉,如果我问这个问题,也许它有一个简单的解决方案,但我现在已经三天摸不着头脑了,我找不到一个好的解决方案。
我有两个表,一个定义“总计”,另一个表定义“详细信息”。
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)。
即。 “街机类别”排名:
|item_id|category| rank|
| 1 | arcade| 1|
| 3 | arcade| 3|
| 4 | arcade| 2|
实现类似目标的最佳方式是什么?
提前感谢所有人!
答案 0 :(得分: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