Laravel 在查询中使用grouby和sum

Laravel 在查询中使用grouby和sum,laravel,eloquent,laravel-5.2,Laravel,Eloquent,Laravel 5.2,我有一个相当大的查询,我试图获取orders.price列的总和。使用下面的代码,它只返回44.00,这是第一行的价格。当我运行原始SQL时,它返回一个名为AGGREGATE的列,其中包含1000多行价格。我想返回所有这些价格的单一总计 当我删除groupBy时,它基本上可以正常工作。然而,groupby就在那里,因为我似乎得到了重复的行 $query = Order::leftJoin('customers', 'orders.customer_id', '=', 'customers.cus

我有一个相当大的查询,我试图获取orders.price列的总和。使用下面的代码,它只返回44.00,这是第一行的价格。当我运行原始SQL时,它返回一个名为AGGREGATE的列,其中包含1000多行价格。我想返回所有这些价格的单一总计

当我删除groupBy时,它基本上可以正常工作。然而,groupby就在那里,因为我似乎得到了重复的行

$query = Order::leftJoin('customers', 'orders.customer_id', '=', 'customers.customer_id')
    ->leftJoin('addresses', 'orders.order_id', '=', 'addresses.order_id')
    ->where('orders.customer_id', '!=', 0);

$query->whereIn('user_id', [3, 5, 10, 15]);

$query->groupBy('orders.order_id');

$sum = $query->sum('orders.price');
这里我省略了一些代码,但是连接实际上是必要的

以下是生成的SQL:

SELECT
    sum(`orders`.`price`) AS AGGREGATE
FROM
    `orders`
LEFT JOIN `customers` ON `orders`.`customer_id` = `customers`.`customer_id`
LEFT JOIN `addresses` ON `orders`.`order_id` = `addresses`.`order_id`
WHERE
    `orders`.`customer_id` IS NOT NULL
AND `orders`.`customer_id` != '0'
AND `orders`.`user_id` IN (3, 5, 10, 15)
GROUP BY
    `orders`.`order_id`
ORDER BY
    `orders`.`order_id` DESC

您可能必须用子查询替换联接:

哪里有 挑选* 来自客户 其中orders.customer\u id=customers.customer\u id 和 然后,您可以按删除组

如果您使用关系:

$query->whereHas'customers',函数$query{ $query->where。。。 }
您的第一行可能有错误:订单::leftJoin'customers'、'customers.customer\u id'、'='、'customers.customer\u id'-您正在将customers.customer\u id与customers.customer\u id合并。是的,谢谢您指出这一点。那个错误正是从我稍微重写的地方来的。我想是的,但你永远不知道。顺便问一下,您是否尝试过启用和转储查询日志?我可以想象这是一个语法问题,例如,查询生成器没有正确生成一些括号。我已将生成的SQL添加到我的问题中。为帮助干杯好吧,如果你想只得到一个总结果,而不是每个组只有一个结果,而你只能与订单匹配,那么你显然应该去掉groupBy。在我看来,您的两个左连接都完全过时了,因为您既没有在where子句中使用这些表,也没有在select中使用这些表。不过,在您的案例中,左连接根本不会限制结果。-也许这是一个很好的问题,你想要的输出是什么。我猜对于某些特定用户,所有客户的所有订单的总价值是多少?