2008-08-26 92 views
89

我有一個標籤表,並希望從列表中獲得最高計數標籤。喜歡用SQL集團通過訂單按

SELECT COUNT(*), `Tag` from `images-tags` 
GROUP BY `Tag` 

id (1) tag ('night') 
id (2) tag ('awesome') 
id (3) tag ('night') 

的樣本數據看起來得到我回我在尋找完美的數據。不過,我想組織它,所以最高的標籤數量是第一位的,並限制它只給我前20個左右。

我想這...

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY COUNT(id) DESC 
LIMIT 20 

,我不斷收到 「無效使用組功能 - ErrNr 1111」

我在做什麼錯?

我使用MySQL 4.1.25 Debian的

+0

是的,絕對。完成。 – maxsilver 2014-12-19 20:19:22

回答

164

在MySQL的所有版本,只需別名在SELECT列表中的聚合,併爲了通過別名:

SELECT COUNT(id) AS theCount, `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY theCount DESC 
LIMIT 20 
48

MySQL的前5版沒有允許在ORDER聚合函數BY子句。

您可以繞過這個限制使用舊版語法:

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY 1 DESC 
LIMIT 20 

1,因爲它是要在組的第一列。

7

我不瞭解MySQL,但在MS SQL中,可以使用order by子句中的列索引。我之前做過這個,因爲它更容易處理。

所以

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER BY COUNT(id) DESC 
LIMIT 20 

變爲

SELECT COUNT(id), `Tag` from `images-tags` 
GROUP BY `Tag` 
ORDER 1 DESC 
LIMIT 20 
4

在Oracle中,像這樣的作品很好分離的計數和訂購好一點。我不知道這是否會在MySQL的4

select 'Tag', counts.cnt 
from 
    (
    select count(*) as cnt, 'Tag' 
    from 'images-tags' 
    group by 'tag' 
) counts 
order by counts.cnt desc 
+0

似乎在10.1.14-MariaDB(與MySQL兼容)中爲我工作。我認爲我不得不``作爲計數`,但它仍然沒有`as`部分。 – 2017-08-24 14:08:58

2

您可以繞過這個限制使用舊版語法: ORDER BY 1 DESC

此語法不棄用全部,它是SQL99的E121-03。

+4

這應該是一個評論而不是答案。 – 2014-04-24 18:53:01

+7

你不應該評論近六年的答案:-) – 2014-04-30 16:48:16

+3

Kkkk,夠公平的。 – 2014-04-30 18:22:41

0

嘗試此查詢

SELECT data_collector_id , count (data_collector_id) as frequency 
    from rent_flats 
    where is_contact_person_landlord = 'True' 
    GROUP BY data_collector_id 
    ORDER BY count(data_collector_id) DESC