2014-07-16 51 views
1

如何按特定列中出現的次數排列mysql表?按發生次數對mysql進行排序

示例表:

ID Name 
1 Alfred 
2 Alfred 
3 Burt 
4 Alfred 
5 Jill 
6 Jill 
7 Jill 
8 Jill 
9 Burt 

該排序表中應該有如下,因爲「吉爾」是出現最多的名字,應該先進行排序,依此類推:

ID Name 
5 Jill 
6 Jill 
7 Jill 
8 Jill 
1 Alfred 
2 Alfred 
4 Alfred 
3 Burt 
9 Burt 

回答

5

你必須將這些信息引入查詢。

select e.* 
from example e join 
    (select name, count(*) as cnt 
     from example 
     group by name 
    ) en 
    on e.name = en.name 
order by cnt desc, e.name, e.id; 

注意,由計數order by不僅訂單:這是使用join典型的做法。它也按名稱命令。如果兩個名稱具有相同的計數,那麼它將使它們保持在一起。

+0

非常感謝:) –

+0

示例結果集似乎也是由'id'命令的(它沒有說明這是一個要求,但是向'ORDER BY'添加'e.id'會使結果更具確定性。我的首選是爲了避免一個問題(後來),列出所有的列引用,ORDER BY en.cnt,e.name,e.id',如果某人後來在'example'表中添加了一個名爲'cnt'的列(限定所有列參考是最佳實踐。) – spencer7593