Mysql Запрос или Laravel Красноречивый для среднего из нескольких столбцов - PullRequest
0 голосов
/ 21 марта 2020

Здесь две таблицы.

table1: Customer

+----+-------+-------------+--------+
| id | Ip_Id | Customer_Id | Class  |
+----+-------+-------------+--------+
| 1  | 100   | A           | First  |
| 2  | 100   | B           | First  |
| 3  | 100   | C           | First  |
| 4  | 101   | D           | First  |
| 5  | 101   | E           | First  |
| 6  | 100   | F           | Second |
+----+-------+-------------+--------+

table2: Customer_Usage

+-------+-------------+----------------+--------+------------+
| Ip_Id | Customer_Id | Customr _Usage | Amount | Date       |
+-------+-------------+----------------+--------+------------+
| 100   | A           | 10             | 100    | 21-02-2020 |
| 100   | B           | 20             | 200    | 22-02-2020 |
| 100   | A           | 30             | 500    | 23-03-2020 |
| 100   | B           | 40             | 500    | 24-02-2020 |
+-------+-------------+----------------+--------+------------+

Условие при вводе значения для поиска Ip_Id, например, для 100 это даст результат, как показано ниже. сделать среднее значение от даты. Как создать объединение и вычислить среднее значение для двух столбцов Avg _Usage, Avg_Amount для этих двух таблиц в Laravel с использованием Mysql

Результат:

+-------+-------------+------------+------------+
| Ip_Id | Customer_Id | Avg _Usage | Avg_Amount |
+-------+-------------+------------+------------+
| 100   | A           | 20         | 300        |
| 100   | B           | 30         | 350        |
+-------+-------------+------------+------------+

Использую запрос ниже.

$results  = DB::table('Customer')
->select('Customer.Ip_Id','Customer.Customer_Id', 'Customer_Usage.Usage')
->where('Ip_Id', 100)                
->get();

Ответы [ 2 ]

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

Используйте method-join для объединения Customer таблицы и Customer_Usage таблицы,

И groupBy CustomerId для расчета среднего значения Customr_Usage и Amount в каждой группе.

$results  = DB::table('Customer')
              ->select('Customer.Ip_Id','Customer.Customer_Id', DB::raw('AVG(Customer_Usage.Customr_Usage) AS Avg_Usage'), DB::raw('AVG(Customer_Usage.Amount) AS Avg_Amount'))
              ->join('Customer_Usage', 'Customer_Usage.customer_id', '=', 'Customer.customer_id')
              ->where('Customer.Ip_Id', 100)
              ->groupBy('Customer.Customer_Id')              
              ->get();
0 голосов
/ 21 марта 2020

Вы можете использовать AVG, groupBy и raw для одного запроса;

   DB::table('Customer')
   ->selectRaw('Customer.Ip_Id','Customer.Customer_Id', 'AVG(Customer_Usage) as Avg_Usage',  'AVG(Amount) as Avg_Amount')
   ->join('Customer_Usage', 'Customer_Usage.customer_id', '=', 'Customer.customer_id')
   ->where('Ip_Id', 100)                
   ->groupBy("Customer_Id")
   ->get();

Laravel -> Запросы -> необработанный метод

...