SQL组通过一个订单

我有一个标签表,并希望从列表中获得最高的计数标签。

示例数据如下所示

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

运用

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

让我回到我正在寻找完美的数据。 不过,我想组织它,所以最高的标签数量是第一,并限制它只送我前20左右。

我试过这个…

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

我一直得到“无效的使用组function – ErrNr 1111”

我究竟做错了什么?

我正在使用MySQL 4.1.25-Debian

在所有版本的MySQL中,只需在SELECT列表中别名聚合,然后按别名sorting:

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

在版本5之前的MySQL不允许ORDER BY子句中的集合函数。

您可以使用不赞成使用的语法绕过此限制:

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

1,因为这是你想要分组的第一列。

我不知道MySQL,但在MS SQL中,可以使用order by子句中的列索引。 我之前做过这件事的时候,与group 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 

在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 

您可以使用不build议使用的语法绕过此限制:ORDER BY 1 DESC

这个语法根本不被弃用,它是SQL99中的E121-03。

试试这个查询

  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