mysql - 如何返回按 COUNT(*) 降序排列的行?

标签 mysql sql count query-optimization

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

- id

- type

- parentId

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

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

如何才能以最有效的方式完成这项工作并将服务器的负载降到最低?

表中可以有成千上万条记录,因此手动遍历每条记录是 Not Acceptable ..

最佳答案

只需应用 GROUP BY 子句,并假设您在 parentId 上有一个索引、FOREIGN KEYPRIMARY KEY ,性能应该是相当不错的。 (parentId 看起来很可能是 FORIEGN KEY,所以一定要定义强制索引的约束)。

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

关于mysql - 如何返回按 COUNT(*) 降序排列的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14266741/

相关文章:

php - 计算从数组插入到 mysql 数据库中的总项目数

sql - Oracle SQL - 根据列中的值为结果集中的每一行提供唯一标识符

sql - 如何生成虚拟表以在 PostgreSQL 中生成日期序列?

mysql - 在 MySQL 中计算运行总计

swift - UITextField 在 Swift 中设置最大字符长度

PHP 数据库输出没有显示正确的方式

mysql - 动态mysql Select语句

MySQL UPDATE 查询不适用于 WHERE IN 条件

r - 查找组内前一个冬天的事件数

java - 如何在preparedStatement中将字符编码格式更改为UTF-8。