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

发布于 2022-09-12 03:55:05 字数 1165 浏览 36 评论 0

使用的是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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

守望孤独 2022-09-19 03:55:05
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
一页 2022-09-19 03:55:05

查询文档后发现可以直接在 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文