【发布时间】: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'
)
【问题讨论】: