如何返回按COUNT(*)的降序列出的行?

时间:2013-01-10 20:32:04

标签: mysql sql count query-optimization

我有一个名为foo的表,其中包含以下字段:

- id

- type

- parentId

我想选择一个父IDS列表,按照COUNT(*)的降序显示它们在表格中出现的次数。像这样:

SELECT DISTINCT parentId FROM `foo` 
ORDER BY (COUNT(parentId) DESC where parentId = parentId)

如何以最有效的方式完成这项工作并将最少的负载放在服务器上?

表格中可能有成千上万的记录,因此不能手动浏览每条记录。

2 个答案:

答案 0 :(得分:15)

只需应用GROUP BY子句,假设您在FOREIGN KEY上有索引,PRIMARY KEYparentId,效果就会非常好。 (parentId看起来很可能是FORIEGN KEY,因此请务必定义约束以强制执行索引。

SELECT `parentId`
FROM `foo`
GROUP BY `parentId`
ORDER BY COUNT(*) DESC

答案 1 :(得分:1)

  

如何以最有效的方式完成这项工作并将最少的负载放在服务器上?

关键是最有效的方式

肯定不是Count(),但最有效的是...读取一个字段,您正在存储Count结果。您可以使用触发器或插入后更新它。

尤其是

  

表格中可能有成千上万的记录