sequelize.js - 如何计算列的值并按范围分组?
问题描述
如果我在表中有一个年龄列,我如何检索属于 5 个范围的值的计数?
我目前有一个查询,它只获取年龄不为空或未定义的用户数。
User.findAll({
where: {
age: {
[Op.not]: null,
[Op.notIn]: ['null', 'undefined']
},
},
group: ['age', 'count'],
attributes: [
['age', 'label'],
[Sequelize.fn('count', Sequelize.col('user_id')), 'count']
],
})
电流输出:
{label: 28, count: 86}
期望的结果:
ages: {
0-20: 5,
20-40: 39,
40-60:28,
60-80:11,
80-100:3
}
解决方案
所以最后我为此使用了文字查询:
User.findAll({
where: {
age: {
[Op.not]: null,
[Op.notIn]: ['u', 'undefined', 'x', '']
}
},
attributes: [
[Sequelize.literal('COUNT (CASE WHEN age < 20 THEN age END)'), '<20'],
[Sequelize.literal('COUNT (CASE WHEN age >= 20 AND age <= 29 THEN age END)'), '20-29'],
[Sequelize.literal('COUNT (CASE WHEN age >= 30 AND age <= 39 THEN age END)'), '30-39'],
[Sequelize.literal('COUNT (CASE WHEN age >= 40 AND age <= 49 THEN age END)'), '40-49'],
[Sequelize.literal('COUNT (CASE WHEN age >= 50 THEN age END)'), '≥50'],
[Sequelize.fn('count', Sequelize.col('user_id')), 'count']
]
}),
推荐阅读
- typescript - 在 Web 中运行的 TypeScript 中未定义 regeneratorRuntime
- sql-server - 从包含 24k 条记录的表(CategoryStores)加入需要更长的时间
- sql - Redshift:如果存在则截断表
- vba - 循环遍历单元格,直到找到相同的字符串
- rpa - RPA-自动化无处不在
- sql - SQL如何使用不同的列和连接连接两个查询
- javascript - 如何在 Function.Prototype 上调用调用函数
- mysql - sql server中mysql的from_days()相当于什么?
- apache - Apache - 只允许通过 URL 打开位于特定文件夹中的文件
- python - 如何关闭/退出从 multiprocessing.Pool 生成的 Selenium Chrome 驱动程序?