sequelize怎么查询 所有用户订单总数?

使用的是sequelize框架

用户表user

id name
1  张三
2  李四
3  王五

订单表order

id user_id 
1  1
2  1
3  1
4  2

期望输出结果

id name count
1  张三  3
2  李四  1
3  王五  0

这上面两张表结构如何查询用户的订单总数呢?

订单表中只出现了用户id(1,2)两个用户的订单数据,用户user_id = 3的用户没有订单记录。

目前我这边想到的方法是使用表连接后查询订单表order然后groupby 统计订单数,查询的结果如下

const userDBModel = require('./db/user');
const orderDBModel = require('./db/order');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;

orderDBModel.belongsTo(userDBModel, {foreignKey: 'user_id', targetKey: 'id'}); // 表关联

// 查询
orderDBModel.findAll({
raw: true, 
include: [userDBModel],
attributes: [
        [Sequelize.col('user.id'), 'id'],
        [Sequelize.col('user.name'), 'name'],
        [Sequelize.fn('COUNT'), 'count']
      ],
group: 'user.id',
}).then((result) => {
  console.log(result, 'result');
  resolve(result);
}).catch((error) => {
  reject(new ApiError(error, 500));
});

查询结果未出现王五的数据,这种如何将未出现在订单表的用户数据查询并补0呢?

id name count
1  张三  3
2  李四  1
阅读 6.2k
2 个回答
select a.id, a.name, ifnull(b.c, 0) as count
from user a
left join (
    select user_id, count(0) as c
    from order
    group by user_id
) b on a.id = b.user_id
select a.id, a.name, (
    select count(0)
    from order
    where user_id = a.id
) as count
from user a

查询文档后发现可以直接在 attributes里面写sql语句。

这个应该是查询user表然后统计 订单数。不用链接表啥的,我想多了,还需要多使用sql.哈哈

userDBModel.findAll({
    attributes: [
    'id',
    'name',
    [Sequelize.literal(`(
            SELECT COUNT(*)
            FROM order AS order
            WHERE
                order.user_id = user.id
        )`),
      'count']
    ],
    where:{
     //....
    },
})

参考链接api Sub Queries

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题