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