簡體   English   中英

Laravel SQL groupBy 和 Sum

[英]Laravel SQL groupBy And Sum

這是我的表關系:

**reservations** id, date, etc...<br>
**reservation_service_info** service_info_id, reservation_id<br>
**services_info** price etc...

我正在嘗試按天計算預訂價格。 下面是代碼和結果:

return $query->selectRaw('DATE(start_time) AS date')
        ->selectRaw("(SELECT SUM(price) FROM `services_info` inner join `reservation_service_info` on `services_info`.`id` = `reservation_service_info`.`service_info_id` where `reservation_service_info`.`reservation_id` = reservations.id) as price")
        ->orderBy('date', 'ASC')
        ->get('price', 'date')

結果:

[
  {
    "date": "2016-06-01",
    "price": "345.00"
  },
  {
    "date": "2016-06-01",
    "price": "90.00"
  },
  {
    "date": "2016-06-01",
    "price": "222.00"
  },
  {
    "date": "2016-06-02",
    "price": "393.00"
  },
  {
    "date": "2016-06-02",
    "price": "142.00"
  }
]

當我在查詢中添加groupBy('date') ,它按 dosent SUM(price) 對其進行分組

[
  {
    "date": "2016-06-01",
    "price": "345.00"
  },
  {
    "date": "2016-06-02",
    "price": "393.00"
  }
]

我認為您的查詢構建方式有點錯誤。 我會建議這樣的思考方式:

return $query->select(\DB::raw('DATE(start_time) AS date'), \DB::raw('SUM(price) as price'))
        ->join('reservation_service_info', 'reservations.id', '=', 'reservation_service_info.reservation_id')
        ->join('services_info', 'services_info.id', '=', 'reservation_service_info.services_info_id')
        ->orderBy('date', 'ASC')
        ->groupBy('date')
        ->get();

如果$query表是reservations這應該有效。

嘗試這個 :

                 $users=   DB::table('reservation_service_info')
                     ->join('services_info', 'reservation_service_info.service_info_id', '=', 'services_info.id')
                     ->join('reservations', 'reservation_service_info.reservation_id', '=', 'reservations.id')
                     ->select('DATE(reservations.start_time) AS date','SUM(services_info.price) AS price')
                     ->orderBy('reservations.start_time', 'ASC')
                     ->groupBy('reservations.start_time')
                     ->get();

您應該使用sum(price)來獲得總和:

return $query->selectRaw('DATE(start_time) AS date')
        ->selectRaw("(SELECT SUM(price) FROM `services_info` inner join `reservation_service_info` on `services_info`.`id` = `reservation_service_info`.`service_info_id` where `reservation_service_info`.`reservation_id` = reservations.id) as price")
        ->orderBy('date', 'ASC')
        ->groupBy('date')
        ->get();

暫無
暫無

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

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