如何从连接中的一组记录中获取列的总和?

Posted

技术标签:

【中文标题】如何从连接中的一组记录中获取列的总和?【英文标题】:How to get the sum of columns from a group of records in a join? 【发布时间】:2020-04-25 22:23:23 【问题描述】:

我有一个将文件退还给我的请求。我想把每个文件的货的总和汇总起来。

看起来像这样:

有文件。

  +-------------+----------+
  | document_id | owner_id | 
  +-------------+----------+
  | 52f20e4d    | ef27737d |  
  | 3bfdc5aa    | ef27737d |   
  +-------------+----------+

产品附在每个文件上。

  +-------------+-------------+-----------+
  | product_id  | document_id | total_sum |
  +-------------+-------------+-----------+
  | b60624a7    | 52f20e4d    | 10        |
  | fcc21801    | 52f20e4d    | 5         |
  | d5cbe99d    | 3bfdc5aa    | 3         |
  | 5e537533    | 3bfdc5aa    | 4         |
  +-------------+-------------+-----------+

我的php代码:

$result = DB::table('documents as docs')->leftJoin('products as t_products', function($join) 
    $join->on('t_products.document_id', '=', 'docs.document_id');
)->where('docs.owner_id', '=', $currentUserId)->select('docs.document_id', 't_products.total_sum')
    ->get();

return response()->json($result);

我得到以下信息:

[
  
      "document_id": "52f20e4d",
      "total_sum": "5"
  ,

  
      "document_id": "52f20e4d",
      "total_sum": "10"
  ,

  
      "document_id": "3bfdc5aa",
      "total_sum": "4"
  ,

  
      "document_id": "3bfdc5aa",
      "total_sum": "3"
  
]

但我希望只看到两个将汇总 total_sum 的条目。

像这样:

[
    
        "document_id": "52f20e4d",
        "total_sum": "15"
    ,

    
        "document_id": "3bfdc5aa",
        "total_sum": "7"
    
]

【问题讨论】:

【参考方案1】:

按文档ID和总和添加分组

$result = DB::table('documents as docs')
    ->leftJoin('products as t_products', function($join) 
        $join->on('t_products.document_id', '=', 'docs.document_id');
    )
    ->where('docs.owner_id', '=', $currentUserId)
    ->selectRaw('docs.document_id, sum(t_products.total_sum) as total_sum')
    ->groupBy('docs.document_id')
    ->get();

【讨论】:

以上是关于如何从连接中的一组记录中获取列的总和?的主要内容,如果未能解决你的问题,请参考以下文章

如何从最近 500 条记录中获取在线用户的总和?

仅返回基于多连接中的一列的最小记录

连接表SQL PHP中列的总和不起作用[重复]

如何在 PyQt5 QTableWidget 中获取选定索引中的项目总和

Mongoose聚合从另一个集合中获取多条记录中的喜欢总和

合并来自谷歌表格列的记录