我只想简单地总结一下。 我用过这段代码
$money = Income::sum('money');
也累了这个
$money = Income::select(DB::raw('sum(money)'))->get();
但它正在抛出错误。我正在使用postgresql作为我的数据库。 错误讯息:
SQLSTATE[42883]: Undefined function: 7 ERROR: function sum(character varying) does not exist
LINE 1: select sum("money") as aggregate from "incomes"
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. (SQL: select sum("money") as aggregate from "incomes")
我的桌子:
incomes
+----+---------+-------+
| id | orderid | money |
+----+---------+-------+
| 1 | 2343 | 23 |
| 2 | 2344 | 55 |
+----+---------+-------+
答案 0 :(得分:2)
根据您的错误消息,sum
方法不会接收varchar(字符变化)。听起来money
列不是数字数据类型(尽管它只包含数值。
要解决此问题,请将值转换为数字数据类型:
Income::select(DB::raw('sum(cast(money as double precision))'))->get()
请注意,这不一定是高效的。您可以考虑更改数据库架构(如果可能)以将货币存储为整数和数据库中的分数。也就是说,数据库中的1000将反映10.00美元。
答案 1 :(得分:-1)