Adonis 查询生成器:条件计数
Adonis Query Builder: Conditional Count
所以我想做的是按日期对列表进行分组,在该组中,我想计算具有特定值的列。
这是 table 的示例值:
[
{
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 和 return 日期的所有订单分组,并且其中的订单总数为 total_orders。
我现在要做的是统计所有0
的order_status和1
的order_status。已经被困了几个小时,提前致谢!
更新
暂时放弃使用 Query Builders,我使用 Database.raw()
实现了我想要的,但是为了项目的一致性我仍然需要使用 Query Builders,所以谁能帮我把它转换成 QueryBuilder 版本?
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'
)
我已经解决了,但是还是要用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')
所以我想做的是按日期对列表进行分组,在该组中,我想计算具有特定值的列。
这是 table 的示例值:
[
{
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 和 return 日期的所有订单分组,并且其中的订单总数为 total_orders。
我现在要做的是统计所有0
的order_status和1
的order_status。已经被困了几个小时,提前致谢!
更新
暂时放弃使用 Query Builders,我使用 Database.raw()
实现了我想要的,但是为了项目的一致性我仍然需要使用 Query Builders,所以谁能帮我把它转换成 QueryBuilder 版本?
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'
)
我已经解决了,但是还是要用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')