[英]Adonis Query Builder: Conditional Count
所以我想做的是按日期分組列表,在那個組上,我想計算一個具有特定值的列。
這是該表的示例值:
[
{
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。
我現在要做的是計算所有 order_status 的值為0
和 order_status 的值為1
。 已經被困了幾個小時了,在此先感謝!
更新暫時放棄了使用查詢構建器,我使用Database.raw()
實現了我想要的,但是為了項目的一致性,我仍然需要使用查詢構建器,所以任何人都可以幫我將它轉換為 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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.