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

Cli*_*ote 7 mysql sql count query-optimization

我有一个foo用这些字段调用的表:

- id

- type

- parentId
Run Code Online (Sandbox Code Playgroud)

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

SELECT DISTINCT parentId FROM `foo` 
ORDER BY (COUNT(parentId) DESC where parentId = parentId)
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*ski 15

只需应用一个GROUP BY子句,并假设你有一个索引FOREIGN KEY,或者PRIMARY KEYon parentId,性能应该非常好.(parentId看起来很可能是一个FORIEGN KEY,所以一定要定义约束来强制执行索引).

SELECT `parentId`
FROM `foo`
GROUP BY `parentId`
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)