在查询中使用grouby和sum

时间:2018-05-01 12:24:06

标签: laravel eloquent laravel-5.2

我有一个很大的查询,我正试图获取orders.price列的总和。使用下面的代码,它只返回44.00,这是第一行的价格。当我运行原始SQL时,它会在名为“AGGREGATE”的列中返回一个包含1,000多行价格的列。我想以所有这些价格返回一个总额。

当我删除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

1 个答案:

答案 0 :(得分:0)

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

@NgModule({
  declarations: [ 
    HeaderNavbarComponent 
    MessageMenuComponent

 ],
 exports: [  
  ],

 bootstrap: [AppComponent]
})
export class myModule { }

然后您可以删除int chdir(const char *path);

如果您使用关系:

WHERE EXISTS (
  SELECT *
  FROM customers
  WHERE orders.customer_id=customers.customer_id
    AND ...
)