【问题标题】:How to return rows listed in descending order of COUNT(*)?如何返回按 COUNT(*) 降序排列的行?
【发布时间】:2012-12-25 08:39:47
【问题描述】:

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

- id

- type

- parentId

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

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

如何以最有效的方式完成这项工作,并使服务器上的负载最小?

表中可能有成千上万条记录,因此手动遍历每条记录是不可接受的。..

【问题讨论】:

    标签: mysql sql count query-optimization


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如何以最有效的方式完成这项工作,并使服务器上的负载最小?

      关键是最有效的方法

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

      尤其是当

      表中可能有成千上万条记录

      【讨论】:

        猜你喜欢
        • 2021-05-05
        • 2022-01-06
        • 2020-11-09
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 2015-08-18
        • 1970-01-01
        • 2019-07-18
        相关资源
        最近更新 更多