2010-11-19 37 views
0

假設下表:MySQL:選擇按行頻率排序的行

People 
--------------------------- 
id | First Name | Last Name 

我如何選擇最頻繁名字的ORDERed行?

+0

您是否只需要名字,或者您是否需要所有記錄,最先顯示最頻繁的名字? – 2010-11-19 11:53:52

回答

2
select 
    count(firstname) as countFn, 
    firstname 
from people 
group by firstname 
order by countFn desc 

編輯:ID和姓氏從選擇

+0

這不起作用,id和lastname不能在SELECT子句中,因爲它們不是GROUP BY子句的一部分。 – 2010-11-19 12:09:46

+0

@Martin:這是MySQL,它們允許這種非標準行爲。 http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html – 2010-11-19 12:13:24

+0

@Peter謝謝,不知道。 Quote:「服務器可以自由返回組中的任何值,所以結果是不確定的,除非所有的值都是相同的」。在這種情況下,這個答案中的查詢會爲每個firstName返回一個隨機的id和lastname。 Brrrrr,這是可怕的。 – 2010-11-19 12:17:22

0

去除如果你需要看到降序排列的名字的數量排序的所有名稱,那麼甲骨文這將工作:

select n.firstname, n.lastname, g.count 
from 
people n, (select firstname, count(*) count from people group by firstname) g 
where n.firstname=g.firstname 
order by g.count desc 

不知道這是如何與例如MySQL的。

1
select p.*, t.count 
from people p 
, (select FirstName, count(1) as count 
    from people 
    group by FirstName) t 
where p.FirstName = t.FirstName 
order by t.count desc;