2015-09-03 85 views
0

組我有一個SQL查詢的問題,我會首先繪製數據庫結構:SQL ORDER BY和城市

id | userid | City 
    ------------------------ 
    1 | 1 | New York 
    2 | 1 | Washington 
    3 | 1 | New York 
    4 | 1 | Miami 
    5 | 2 | New York 
    4 | 1 | Ney York 
    5 | 1 | Miami 

這是它的外觀, 用戶ID鏈接到用戶帳戶。

我喜歡得到的是以下內容: 如果我查詢用戶標識1,我想獲取該用戶的5個最常見城市的列表及其計數;在這種情況下,將

Counts | City 
    ------------------------ 
    3  | New York 
    2  | Miami 
    1  | Washington 

我已經嘗試過這樣的:

 SELECT count(city), city FROM cities WHERE userid = '1' GROUP BY city ORDER BY count(city) DESC LIMIT 5 

但這只是給出了一個清單,:在adventage

Counts | City 
    ------------------------ 
    1  | New York 
    1  | New York 
    1  | New York 
    1  | Miami 
    1  | Miami 

謝謝!

+0

您不應該得到這些結果。 [這是一個sqlfiddle](http://sqlfiddle.com/#!9/45c1d)以表明它應該工作 – Lamak

+0

請重新檢查您的數據,問題是它的Ney York,可能是New York? – brykneval

回答

1

您的疑問:

SELECT count(city), city 
FROM cities 
WHERE userid = '1' 
GROUP BY city 
ORDER BY count(city) DESC 
LIMIT 5; 

是你想做的事是正確的。如果你在不同的行上獲得同一城市,那麼你可能會遇到數據問題。例如,在城市名稱後面可能有空格但不是可打印的字符。一種方法是通過劃定城市名稱並查看其長度,例如:

SELECT count(city), concat('"', city, '"'), length(city) 
FROM cities 
WHERE userid = '1' 
GROUP BY city 
ORDER BY count(city) DESC 
LIMIT 5; 
0

你想算id的..

SELECT count(id), city 
FROM cities 
WHERE userid = '1' 
GROUP BY city 
ORDER BY count(id) DESC 
LIMIT 5 
+0

Op的查詢應該已經工作 – Lamak