2016-04-08 39 views
2

我這有此查詢,給了我一個特定國家的所有評級:MySQL的:使用限制與精讀

SELECT DISTINCT Country, GROUP_CONCAT(rating ORDER BY rating DESC) AS Ranking 
FROM final 
group by Country 
ORDER BY Country; 

表是這樣的:

"Country" "Rating" "Title" 
" zimbabwe" "0" "Biology Study Guide" 
" zimbabwe" "0" "Impact: A Guide to Business Communication (Esl English 2nd Language Series)" 
" zimbabwe" "0" "Wayside School Gets a Little Stranger (Wayside School)" 
" ysa" "5" "Side effects" 
" ysa" "9" "The Last Precinct" 
" ysa" "0" "The Horse Whisperer" 
" x" "0" "The Evi 
" yugoslavia" "0" "Wild Animus" 
" yugoslavia" "8" "Complete Works of William Shakespeare (Wordsworth Royals Series)" 
" yugoslavia" "3" "Wild Animus" 

我已經遇到兩個問題。我試圖限制收視率爲每個國家10。我在DESC之後添加了LIMIT 10,並且出現語法錯誤。

第二個問題是,在DESC順序中,10低於9,因爲它始於1.我該如何處理?

+0

向我們展示'final'表。 –

+0

它是這樣的: 「國家」 \t「評級」 \t「標題」 「津巴布韋」 \t「0」 \t「生物學研究指南」 「津巴布韋」 \t「0」 \t「影響:指南業務通訊(ESL英語第二語言系列)」 「津巴布韋」 \t 「0」 \t 「路邊學校獲取一個小陌生人(路邊學校)」 「YSA」 \t 「5」 \t 「副作用」 「YSA」 \t「9」\t 「最後分局」 「YSA」 \t 「0」 \t 「馬語者」 「X」 \t 「0」 \t 「脆弱性指數 」 南斯拉夫」 \t 「0」 \t 「野阿尼姆斯」 「南斯拉夫」 \t 「8」\t「威廉莎士比亞全集(華茲華斯皇家系列)」 「南斯拉夫」\t「3」\t「野生動物」 – b0uncyfr0

+0

請用你的問題來更新你的問題。 –

回答

2

爲了限制GROUP_CONCAT(),您可以使用SUBSTRING_INDEX()來削減所需的元素。要將字符串作爲數字訂購,您可以使用CAST()。所以你的查詢應該看起來像:

SELECT DISTINCT 
    Country, 
    SUBSTRING_INDEX(
     GROUP_CONCAT(rating ORDER BY CAST(rating AS UNSIGNED) DESC), ',', 10 
    ) AS Ranking 
FROM 
    final 
GROUP BY 
    Country 
ORDER BY 
    Country; 
+0

在子串索引錯誤處獲取本機調用的不正確參數計數。 – b0uncyfr0

+0

是的,括號中有語法錯誤,現在可以。 – mitkosoft

+0

令人敬畏的工作。我理解CAST(),但對整個語句的子串索引有點困惑。將不得不閱讀更多。感謝mitkosoft。 – b0uncyfr0