You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Sequelize Sum聚合函数查询:如何一次统计活跃与非活跃用户

获取所有活跃与非活跃用户的Sequelize查询方案

别担心,这事儿其实挺简单的!要一次性拉取所有活跃和非活跃状态的用户数据,核心思路就是不对用户状态做过滤,或者明确指定包含两种状态,下面给你几种具体实现方式:

1. 最基础的写法(直接获取全部用户)

Sequelize的findAll()方法默认会返回数据表中的所有记录,所以如果你没有额外加where条件,直接就能拿到所有活跃+非活跃的用户:

// 假设你的用户模型叫做 User
const allUsers = await User.findAll();
// 返回的 allUsers 数组里会包含所有状态的用户

2. 明确指定包含两种状态(避免默认过滤干扰)

如果你的模型或者全局配置里不小心加了默认的活跃状态过滤,或者你想让代码逻辑更清晰,可以用Sequelize的Op.in操作符,明确指定要匹配true和false两种状态:
首先要先导入操作符:

const { Op } = require('sequelize');

然后编写查询:

const allUsers = await User.findAll({
  where: {
    isActive: {
      [Op.in]: [true, false]
    }
  }
});

3. 分组统计活跃/非活跃用户数量(可选)

要是你不仅想获取所有用户,还想同时统计两类用户的数量,可以用聚合函数配合分组查询:

// 记得先导入 sequelize 实例
const { sequelize } = require('./your-sequelize-setup-file');

const userStatusSummary = await User.findAll({
  attributes: [
    'isActive',
    // 使用 COUNT 函数统计每组的用户数量
    [sequelize.fn('COUNT', sequelize.col('id')), 'totalUsers']
  ],
  // 按 isActive 字段分组
  group: ['isActive']
});
// 返回结果示例:
// [
//   { isActive: true, totalUsers: 85 },
//   { isActive: false, totalUsers: 12 }
// ]

其实你之前可能是不小心在查询里加了where: { isActive: true }这类过滤条件,去掉或者改成上面的写法就能拿到所有用户啦。

内容的提问来源于stack exchange,提问作者Vikas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:26:59