How can I do a group by across 3 tables with Sequelize?

主宰稳场 提交于 2019-12-05 10:49:35

Something like this should be what you are looking for:

return CommitFileStatistic.findAll({
  attributes: [[Sequelize.fn('COUNT', '*'), 'fileCount']],
  include: [
    { model: Commit, attributes: [] },
    { model: SourceFile, attributes: [] }
  ],
  group: ['SourceFileId'],
  order: [['fileCount', 'DESC']]
});

Which will result in the following query:

SELECT 
    `CommitFileStatistic`.`id`, 
    COUNT('*') AS `fileCount`, 
    `Commit`.`id` AS `Commit.id`, 
    `SourceFile`.`id` AS `SourceFile.id` 
FROM 
    `commit_file_statistics` AS `CommitFileStatistic` 
LEFT OUTER JOIN `commits` AS `Commit` 
    ON `Commit`.`id` = `CommitFileStatistic`.`CommitId` 
LEFT OUTER JOIN `source_files` AS `SourceFile` 
    ON `SourceFile`.`id` = `CommitFileStatistic`.`SourceFileId` 
GROUP BY `SourceFileId` 
ORDER BY `fileCount` DESC;

This will probably only work on sequelize version 2.0 :)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!