【问题标题】:Mysql Query Or Laravel Eloquent for Average of multiple columnMysql Query 或 Laravel Eloquent 获取多列的平均值
【发布时间】:2020-03-21 04:15:37
【问题描述】:

这里有两张桌子。

table1:客户

+----+-------+-------------+--------+
| 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,它将给出如下结果。对日期的值进行平均。如何使用 Mysql 在 Laravel 中为这两个表创建一个联合并计算平均两列 Avg _Usage,Avg_Amount

结果:

+-------+-------------+------------+------------+
| 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();

【问题讨论】:

    标签: php mysql laravel laravel-5 eloquent


    【解决方案1】:

    使用method-join 加入Customer 表和Customer_Usage 表,

    groupBy CustomerId 用于计算每个组中Customr_UsageAmount 的平均值。

    $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();
    

    【讨论】:

    • 蔡古加又是你救了我
    【解决方案2】:

    您可以使用AVGgroupByraw 查询相同的内容;

       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 -> Queries -> raw method

    【讨论】:

    • 将使用量与平均使用量一起返回有何意义?
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 2022-01-08
    • 1970-01-01
    • 2020-08-31
    • 2018-12-30
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多