【问题标题】:Adonis Query Builder: Conditional CountAdonis 查询生成器:条件计数
【发布时间】:2020-06-18 03:17:23
【问题描述】:

所以我想做的是按日期分组列表,并且在该组上,我想计算具有特定值的列。

这是该表的示例值:

[
  {
     id: 1,
     delivery_date: 2020-06-01,
     order_status: 0,
     quantity: 2
  },
  {
     id: 2,
     delivery_date: 2020-06-01,
     quantity: 2,
     order_status: 0,
  },

  {
     id: 3
     delivery_date: 2020-06-01,
     quantity: 2,
     order_status: 1,
  },
]

我现在查询这个

...
await Order
      .query()
      .select('delivery_date')
      .groupBy('delivery_date')
      .count('delivery_date as total_orders')

结果

delivery_date: "2020-06-01"
total_orders: "6"

我想要达到的结果:

delivery_date: "2020-06-01",
total_orders: 6,
// The count of order_status with value of 0
pending_orders: 2 ,
// The count of order_status with value of 1
confirmed_orders: 2 

这样会将具有相同delivery_date的所有订单分组,并将日期和其中的订单总数作为total_orders返回。

我现在要做的是计算所有值为0 的order_status 和值为1 的order_status。已经被困了几个小时了,在此先感谢!

更新 暂时放弃了使用查询构建器,我使用Database.raw() 实现了我想要的,但是为了项目的一致性,我仍然需要使用查询构建器,所以有人可以帮我将它转换成查询构建器版本吗?

await Database
      .raw(
        'SELECT delivery_date, ' +
        'COUNT(*) FILTER (WHERE order_status = 0) as pending_orders, ' +
        'COUNT(*) FILTER (WHERE order_status = 1) as confirmed_orders, ' +
        'COUNT(*) FILTER (WHERE order_status = 2) as suspended_orders ' +
        'FROM orders ' +
        'GROUP BY delivery_date'
      )

【问题讨论】:

    标签: node.js knex.js adonis.js


    【解决方案1】:

    我已经解决了,但还是要使用Database.raw

    看起来像这样:

    await Order
          .query()
          .select('delivery_date')
          .select(Database.raw('COUNT(*) FILTER (WHERE order_status = 0) as pending_orders'))
          .select(Database.raw('COUNT(*) FILTER (WHERE order_status = 1) as confirmed_orders'))
          .select(Database.raw('COUNT(*) FILTER (WHERE order_status = 2) as suspended_orders'))
          .groupBy('delivery_date')
    

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多