Sequelize - 按关联计数排序

Posted

技术标签:

【中文标题】Sequelize - 按关联计数排序【英文标题】:Sequelize - ORDER BY count of associations 【发布时间】:2020-05-11 06:03:33 【问题描述】:

我有两个模型,Company 和 Employee。协会就像 Company hasMany Employee。员工属于公司。

我必须按关联的数量按降序列出所有公司。

我的功能如下,

function get() 
     return Company.findAndCountAll(
       where:  status: Active , 
       include: [
      
        model: Employee,
        as: 'employees'
      
    ],
     ).then((companies) => 
         return companies
      )

我可以按顺序给出什么,以便我可以根据协会(员工)的数量按降序获得公司列表。

请帮帮我...

我已经尝试如下。但它会抛出类似 invalid reference to FROM-clause entry for table Companies 之类的错误。

function get() 
     return Company.findAndCountAll(
       where:  status: Active , 
       include: [
      
        model: Employee,
        as: 'employees'
      
    ],
     attributes: [
        [Sequelize.literal('(SELECT COUNT(*) FROM employees WHERE employees.company_id = companies.id)'), 'employeesCount']
    ],
    order: [[Sequelize.literal('employeesCount'), 'DESC']],
     ).then((companies) => 
         return companies
      )

company 是表名。

【问题讨论】:

【参考方案1】:

你可以试试这个。

请将您的 fieldName 替换为 sortField

function get() 
     return Company.findAndCountAll(
       where:  status: Active , 
       include: [
      
        model: Employee,
        as: 'employees'
      
    ],
    order: [[sortField, 'DESC']]
     ).then((companies) => 
         return companies
      )

【讨论】:

问题是company表中没有employees_count字段

以上是关于Sequelize - 按关联计数排序的主要内容,如果未能解决你的问题,请参考以下文章

按关联模型排序时,Sequelize 抛出错误“无法找到模型 x 的有效关联”

Sequelize - 如何提取具有 1 个关联记录的记录并按关联记录属性排序

数据框:如何在 Scala 中分组/计数然后按计数排序

Cassandra 按计数排序结果

Django 按日期按计数排序

按计数排序未正确排序 - SQL (MS Access 2007)