簡體   English   中英

Adonis 查詢生成器:條件計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM