【问题标题】:MySQL Query Order By Most OccurrencesMySQL 查询顺序(按大多数出现)
【发布时间】:2012-07-04 19:01:13
【问题描述】:

我有一个 MySQL 表,设置如下:

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

我想返回所有的行,所以它们是按游戏类型排序的,但游戏类型出现次数最多的是按降序排列,然后按投票的数量按降序排列,如下所示:

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

如果我只是在查询末尾有 ORDER BY,它只会按随机顺序对它们进行分组。

我怎样才能做到这一点?

【问题讨论】:

  • 你用过ORDER BY game_type ASC, votes DESC吗?
  • 如果我有 'ORDER BY game_type ASC, votes DESC' - 这会将它们全部分组,但按字母顺序 - 不是按该分组中有多少人。

标签: mysql sql select sql-order-by


【解决方案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

【讨论】:

  • 太棒了!还有一件事。这会将具有最低计数的 game_type 排序在顶部。出于某种原因,当我从 ORDER BY COUNT(game_Type) ASC --> ORDER BY COUNT(game_Type) DESC 更改上述代码时 - 这不会改变顺序,有什么想法吗?
  • @badgers,哎呀,我错了。您需要为 U SELECT 和外部 SELECT 更改它。最后一个订单应该是U.TypeCount DESC 我更新了我的答案。 (实际上,我不知道我是否真的需要ORDER BY COUNT(game_Type) 语句,但我没有时间测试它。
  • 好东西,太完美了。感谢您的帮助
  • 请注意,内部ORDER BY 仅与性能相关,如果有的话。它对整体结果完全没有影响。
  • 很高兴听到。由于您是 StackOverflow 的新手,因此习惯上通过选中答案旁边的复选标记将答案标记为“已回答”,以便其他人知道这已被接受。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2014-03-05
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多