, поэтому я хочу сгруппировать список по дате, и в этой группе я хочу подсчитать столбец с заданным c значением.
Вот примерные значения этого таблица:
[
{
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
, чтобы сгруппировать все заказы с одной и той же доставкой_date и вернуть дату и общее количество заказов в ней как total_orders.
теперь я хочу подсчитать все order_status со значением 0
и order_status со значением 1
. Я застрял в этом на несколько часов, заранее спасибо!
UPDATE Временно отказался от использования построителей запросов, и я достиг того, что хочу, используя 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'
)