2012-07-04 48 views
1

我有一个MySQL表,设置这样的:MySQL查询顺序按大多数OCCURENCES

id | game_type | votes 
01 | aaa  | 2 
02 | bbb  | 2 
03 | ccc  | 4 
04 | aaa  | 7 
05 | aaa  | 1 
06 | ccc  | 11 

我想返回所有行,所以它们被game_type有序,但随着游戏类型最OCCURENCES按降序排列,然后通过投票数量排序按降序排列,如:

04 aaa 7 
01 aaa 2 
05 aaa 1 
06 ccc 11 
03 ccc 4 
02 bbb 2 

如果我只是有ORDER BY在查询结束,它只是组织它们在一个随机的顺序。

关于如何实现这一点的任何想法?

+0

你用'ORDER BY game_type ASC,票DESC'? – Tobas

+0

如果我有'ORDER BY game_type ASC,投票DESC' - 这将按照字母顺序将它们组合在一起 - 而不是按该组的数量计数。 – badgers

回答

1

试试这个:

SELECT M.id, M.game_type, M.votes 
FROM MyTable AS M INNER JOIN 
    (SELECT game_type, COUNT(game_Type) AS TypeCount 
    FROM MyTable 
    GROUP BY game_type 
    ORDER BY COUNT(game_Type) DESC) AS U 
    ON M.game_type=U.game_type 
ORDER BY U.TypeCount DESC, M.game_type, M.votes DESC 
+0

太棒了!还有一件事。这会使顶部的最低计数值为game_type。出于某种原因,当我从ORDER BY COUNT(game_Type)更改上面的代码ASC - > ORDER BY COUNT(game_Type)DESC - 这不会改变顺序,任何想法为什么? – badgers

+0

@badgers,糟糕,我的错误。您需要对U SELECT和外部SELECT进行更改。最后的顺序应该是'U.TypeCount DESC'我更新了我的答案。 (Acutually,我不知道我是否真的需要'ORDER BY COUNT(game_Type)'语句,但我没有时间去测试它 –

+0

好东西,多数民众赞成在完美。谢谢你的帮助 – badgers