Laravel中如何单查询计算带符号的Quantity列总和?
单查询实现方案
当然可以用单查询完成计算,核心思路是在数据库层面通过条件判断动态调整Quantity的正负,再一次性求和,避免两次查询的开销。
方法1:使用CASE语句
$total = Transaction::selectRaw('SUM(CASE WHEN Type = "+" THEN Quantity ELSE -Quantity END) as total') ->value('total');
方法2:使用IF函数(更简洁)
$total = Transaction::selectRaw('SUM(IF(Type = "+", Quantity, -Quantity)) as total') ->value('total');
补充说明
你原来的写法存在语法错误,正确的两次查询写法应该是:
$total = Transaction::where('Type', '+')->sum('Quantity') - Transaction::where('Type', '-')->sum('Quantity');
但这种方式需要两次请求数据库,而上面的单查询方案只需要一次,性能更优,尤其是数据量较大时差异会更明显。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

