Сумма столбцов с группировкой товаров и типов товаров - PullRequest
1 голос
/ 14 марта 2020

У меня есть таблица с

seller_id, transaction_type, sub_total, total_commission_fee, refund_fee, cancellation_fee
3 transaction_type
payment, cancel, refund

Я хочу получить сумму sub_total, total_commission_fee, refund_fee, cancellation_fee для каждого seller_id

sample
seller_id   transaction_type    sub_total   total_commission_fee    refund_fee  cancellation_fee
3           order               40          0                       0           0
4           order               10          0                       0           0   
3           cancel              0           0                       0           3   
3           refund              28          0                       2           0

Я хочу получить такой результат

seller_id   payment_total(sum of all sub_total transaction_type order)  cancel_total(sum of all cancellation_fee transaction_type cancel)   refund_total (sum of all refund_fee transaction_type refund)

Я могу получить сумму без типа транзакции.

Transaction::groupBy('seller_id')
  ->selectRaw('sum(sub_total) as total, seller_id')

Есть ли способ получить результат, как я хочу. Еще я должен сделать запрос на получение и l oop через каждого. Это может вызвать проблемы, когда таблица становится большой

И как называются операции такого типа?

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Вы можете использовать напрямую с группой по идентификатору продавца (seller_id). пожалуйста, попробуйте использовать ниже запрос

Transaction::groupBy('seller_id')
     ->selectRaw('SUM(sub_total) AS payment_total, 
                  SUM(cancellation_fee) AS cancel_total,
                  SUM(refund_fee) AS refund_total,
                  seller_id')
0 голосов
/ 14 марта 2020

Вы можете использовать IF(condition, value_if_true, value_if_false) для суммирования значений:

Transaction::groupBy('seller_id')
         ->selectRaw('SUM(IF(transaction_type = "order", sub_total, 0)) AS payment_total, 
                      SUM(IF(transaction_type = "cancel", cancellation_fee, 0)) AS cancel_total,
                      SUM(IF(transaction_type = "refund", refund_fee, 0)) AS refund_total,
                      seller_id')
...