2013-02-08 96 views
0

是否有可能使用一個關鍵字來將我的SELECT QUERY中的結果按其出現在數據表中的次數排序?在SQL中使用ORDER BY子句

的MySQL:

SELECT * FROM interests ORDER BY (keyword) 

表中的值:

hiking 
running 
swimming 
hiking 
photography 
swimming 
hiking 

如果它們是基於每個值的頻率返回的順序在表中occurence這將是:

hiking 
hiking 
hiking 
swimming 
swimming 
running 
photography 

如果沒有一個特定的關鍵字,我該如何用SQL實現這個功能?

感謝

+1

嘗試組通過和計數(*)。不知道你的表模式,所以如果你表明它會有所幫助。 – OldProgrammer 2013-02-08 18:17:57

回答

5
SELECT COUNT(keyword) AS cnt, keyword 
FROM interested 
GROUP BY keyword 
ORDER BY cnt 

會給你按升序排列每個關鍵字的數量。但是,你不會得到3項遠足,2swimming等..只是hiking,3swimming,2等..

+1

使用'order by cnt desc'獲得最高的計數。 – Guffa 2013-02-08 18:18:11

+0

如果我想使用SELECT *會怎麼樣? – user2048211 2013-02-08 18:19:49

+0

您可以根據需要選擇任意數量的字段。如果您要提取未分組/彙總的字段,結果可能會有些不確定。 – 2013-02-08 18:21:39

4
SELECT a.* 
FROM interests a 
     INNER JOIN 
     (
      SELECT keyword, COUNT(*) totalCount 
      FROm interests 
      GROUP BY keyword 
     ) b ON a.keyword = b.keyword 
ORDER BY b.totalCount DESC 
+0

這真棒謝謝你!現在,我怎麼能讓我的SQL只顯示每個值之一?我怎樣才能得到每個值的計數? – user2048211 2013-02-08 18:26:34

+0

這是你想要的嗎? http://www.sqlfiddle.com/#!2/4f937/7 – 2013-02-08 18:27:50

+0

是的!謝謝!現在,我如何獲得每個值的數量? – user2048211 2013-02-08 18:29:28

0
SELECT 
    t1.*,count(t1.keyword) 
    FROM 
    interests AS t1 INNER JOIN (
    SELECT 
      keyword,count(*) totalcount 
     FROM 
      interests GROUP BY keyword 
    )t2 
ON t1.keyword=t2.keyword group by t1.keyword 
    ORDER BY t2.totalcount DESC 

Sql Fiddle demo