You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 10关联表列聚合查询问题求助

问题分析与解决方案

核心问题

你的查询中SUM(transactiondetails.amount)返回NULL,主要有两个原因:

  1. 关联条件错误:transactiondetails的id是自身的主键,不可能和transactions的id关联。正确的关联应该是transactiondetails的外键字段(通常命名为transaction_id)关联transactions.id。
  2. 空值处理缺失:即使关联正确,如果某笔交易没有对应的明细记录,SUM(NULL)会返回NULL,需要将其转换为0。

修正后的SQL

SELECT
  typetransactions.name_transaction,
  mahasiswa.nim AS NIM,
  mahasiswa.nama AS Nama,
  COALESCE(SUM(transactiondetails.amount), 0) AS total_amount
FROM transactions
LEFT JOIN transactiondetails ON transactions.id = transactiondetails.transaction_id -- 修正关联条件
LEFT JOIN typetransactions ON typetransactions.id = transactions.type_transaction
LEFT JOIN mahasiswa ON transactions.depositor = mahasiswa.id
WHERE transactions.deleted_at IS NULL
GROUP BY
  transactions.id,
  typetransactions.name_transaction,
  mahasiswa.nim,
  mahasiswa.nama

关键修改说明

  • 修正关联条件:将transactiondetails.id改为transactiondetails.transaction_id(如果你的外键字段名不同,替换为实际字段名)。
  • 空值转换:用COALESCE(SUM(...), 0)确保没有明细时返回0而非NULL。
  • 精简字段:只保留你需要的name_transaction、NIM、Nama和求和字段,避免冗余。
  • 完善GROUP BY:根据SQL标准,GROUP BY子句需要包含所有SELECT中的非聚合字段,避免潜在的语法错误或结果异常。

内容的提问来源于stack exchange,提问作者Arkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:12:11