我有一个名为foo
的表,其中包含以下字段:
- id
- type
- parentId
我想选择一个父IDS列表,按照COUNT(*)
的降序显示它们在表格中出现的次数。像这样:
SELECT DISTINCT parentId FROM `foo`
ORDER BY (COUNT(parentId) DESC where parentId = parentId)
如何以最有效的方式完成这项工作并将最少的负载放在服务器上?
表格中可能有成千上万的记录,因此不能手动浏览每条记录。
答案 0 :(得分:15)
只需应用GROUP BY
子句,假设您在FOREIGN KEY
上有索引,PRIMARY KEY
或parentId
,效果就会非常好。 (parentId
看起来很可能是FORIEGN KEY
,因此请务必定义约束以强制执行索引。
SELECT `parentId`
FROM `foo`
GROUP BY `parentId`
ORDER BY COUNT(*) DESC
答案 1 :(得分:1)
如何以最有效的方式完成这项工作并将最少的负载放在服务器上?
关键是最有效的方式。
肯定不是Count(),但最有效的是...读取一个字段,您正在存储Count结果。您可以使用触发器或插入后更新它。
尤其是
时表格中可能有成千上万的记录