#sql #laravel
#sql #ларавель
Вопрос:
Я хочу получить результат приведенной ниже таблицы, у меня есть две таблицы: одна для клиентов и одна для транзакций, совершенных клиентами.Кто-нибудь может помочь мне добиться этого!Заранее благодарю, вот что я хочу вернуть
Это запрос, который я пишу, чтобы получить результат.
$customers_trans = DB::table('contacts as c')
->select(
DB::raw('SUM(tr.final_total) AS total_customer'),
DB::raw('COUNT(c.id) AS customercount'),
DB::raw('COUNT(c.id) AS average')
)
->whereBetween('tr.transaction_date', [$date_debut, $date_fin])
->groupBy('c.id')
->join('transactions as tr', 'tr.contact_id', '=', 'c.id')
->get()->toArray();
Комментарии:
1. Итак, в основном вы хотите иметь: между любыми двумя датами / временем общее количество клиентов / клиентов, совершивших транзакции, общая стоимость транзакций и средняя стоимость транзакции на клиента / клиента — это правильно?
2. Да, это именно то, что я хочу @Donkarnash
3. Что не так с вашим кодом? Вам необходимо предоставить информацию о структуре таблицы и образцах данных, прежде чем кто-либо сможет помочь.
4. @miken32 я не получаю результат, как на этом изображении. Таблица в качестве примера приведена на рисунке ниже, структура таблиц, я не хотел ее указывать, так как она немного длинная.
Ответ №1:
Я думаю, это то, что вы хотите:
$customers_trans = DB::table('contacts as c')
->select(
DB::raw('SUM(tr.final_total) AS total_customer'),
DB::raw('COUNT(*) AS customer_count'),
DB::raw('AVG(tr.final_total) AS average')
)
->join('transactions as tr', 'tr.contact_id', '=', 'c.id')
->whereBetween('tr.transaction_date', [$date_debut, $date_fin])
->groupByRaw('HOUR(tr.transaction_date)')
->get()
->toArray();
Комментарии:
1. Я попробую и расскажу вам результат @Hafez Divandari
2. я получаю сообщение об ошибке вызова неопределенного метода groupByRaw
3. @Moum какую версию Laravel вы используете? попробуйте
groupBy(DB::raw('HOUR(tr.transaction_date)'))
вместо этого.4. я использую версию 6 Laravel, хорошо, спасибо
5. Это работает очень хорошо, большое вам спасибо за вашу помощь, Хафез Дивандари, вы сэкономили мое время.