2010-07-10 38 views
0

我有一個數據庫,它將收到大量的信息,但最重要的是它會收到每行的城市名稱。下面的示例:mysql ORDER results按列數發生次數

id   city 
1   London 
2   Manchester 
3   London 
4   Brighton 
5   Oxford 
6   Oxford 
7   London 

我想從此表中只選擇城市名稱,顯示最常出現的前3名結果。

到目前爲止,我使用下面,我發現查詢:

SELECT N.city, COUNT(*) AS howmany 
FROM (SELECT DISTINCT city FROM events) AS N, 
events AS T 
WHERE N.city = T.city 
GROUP BY N.city 
ORDER BY howmany 
LIMIT 0,2 

回答

2

您可以簡化現有的查詢到一個單一的訪問事件表,而不需要將它加入到自己:

SELECT N.city, 
     COUNT(N.city) AS howmany 
    FROM events AS N 
GROUP BY N.city 
ORDER BY howmany 
LIMIT 3 

,如果你不想要回數,請嘗試:

SELECT N.city 
    FROM events AS N 
GROUP BY N.city 
ORDER BY COUNT(N.city) 
LIMIT 3 
+0

呃,'AS T'然後'N .___'? – Amber 2010-07-10 22:26:17

+0

發現了謝謝。 – 2010-07-10 22:27:06

+0

+1:很高興看到有人使用表別名 – 2010-07-10 22:30:00

2

你不需要additi加入GROUP BY已經爲您處理DISTINCT方面。

SELECT city, COUNT(*) AS howmany 
FROM 
events 
GROUP BY city 
ORDER BY howmany DESC 
LIMIT 0,3 
+0

+1:您在更正之前可以更正LIMIT :) – 2010-07-10 22:30:43

+0

是的 - MySQL有點出於我的舒適區域:-) – 2010-07-10 22:31:25

2

如果你只是想在你的最終結果的「城市」字段:

SELECT city FROM (
    SELECT city, COUNT(*) as ccount 
    FROM events 
    GROUP BY city 
) 
ORDER BY ccount DESC 
LIMIT 3 

如果你不關心最終結果的字段,只要城市是一個它更簡單:

SELECT city, COUNT(*) as ccount 
FROM events 
GROUP BY city 
ORDER BY ccount DESC 
LIMIT 3