簡體   English   中英

如何使用 Laravel Query Builder 獲取兩個不同列的總和?

[英]How to get sum of two different columns with Laravel Query Builder?

我正在嘗試使用 Laravel 查詢構建器獲取兩個不同列的總和,下面的普通 SQL 查詢工作正常,但我無法使用 Laravel 查詢。

SELECT SUM(logins_sun + logins_mon) FROM users_stats WHERE id = 7; // returns: 1034

這是我嘗試過的。

$stats = DB::table('users_stats')->where('id', '=', '7')->sum('logins_sun', '+', 'logins_mon'); // returns: 587.0

這是我的數據庫結構。

+----+------------+------------+
| id | logins_sun | logins_mon |
+----+------------+------------+
|  7 |     587    |     447    |
+----+------------+------------+

它應該返回1034但 Laravel 查詢只返回最后一個值587.0

我怎樣才能讓它工作?

sum是一個聚合函數,只接受一個參數。 它將對列中每一行的值求和。 在您的情況下,查詢僅返回一行,因此總和只是該列的值(傳遞給sum()的第一個參數)。 可能有一些更好的方法來做到這一點,但我認為您應該能夠使用原始表達式來返回兩列的總和。

$stats = DB::table('users_stats')
             ->select(DB::raw('logins_sun + logins_mon'))
             ->where('id', '=', '7');

您可以嘗試使用sum()方法,例如:

DB::table('users_stats')
    ->where('id', '7')
    ->sum(\DB::raw('logins_sun + logins_mon'));

嘗試將回調傳遞給 sum() 並在那里進行添加,例如:

$stats = DB::table('users_stats')->where('id', '=', '7')->sum(function ($row) {
    return $row->logins_sun + $row->logins_mon;
});

您可以通過以下方式在 Laravel 中直接運行原始 sql:

$sql = "SELECT SUM(logins_sun + logins_mon) FROM users_stats WHERE id = :ID";

$result = DB::select($sql,['ID'=>7]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM