总和和在1个查询中计数列还是使用PHP?

时间:2012-06-29 12:44:23

标签: php mysql

认为我的问题是我试图在同一个查询中计算一个计数,这可以在php中实现以避免这种情况吗? “记录”列显示记录的数量,而“成本”总结成本,这很有效,但我想在这两列的总和中显示总计?

Select
  tblcontacts.ContactFullName As Name,
  Count(tblcases.CaseID)As Records,
  Sum(tblcases.CaseCommission) As Costs
From
  tblcontacts Inner Join
  tblcases On tblcontacts.ContactID =
    tblcases.ContactAssignedTo
Group By
  tblcontacts.ContactFullName

3 个答案:

答案 0 :(得分:4)

如果不添加其他查询并执行UNION个查询,则无法在MySQL中执行此操作,例如:

Select
  tblcontacts.ContactFullName As Name,
  Count(tblcases.CaseID)As Records,
  Sum(tblcases.CaseCommission) As Costs
From
  tblcontacts Inner Join
  tblcases On tblcontacts.ContactID =
    tblcases.ContactAssignedTo
Group By
  tblcontacts.ContactFullName

UNION ALL

Select
  '--GRAND-TOTAL--',
  Count(tblcases.CaseID),
  Sum(tblcases.CaseCommission)
From
  tblcontacts Inner Join
  tblcases On tblcontacts.ContactID =
    tblcases.ContactAssignedTo

然而,在这种情况下,你可能会更好地计算PHP中的总计,可能在迭代行来构建表时。

答案 1 :(得分:3)

最后使用With RollUp。表的单次扫描,因此它以性能为导向。

Select
  tblcontacts.ContactFullName As Name,
  Count(tblcases.CaseID)As Records,
  Sum(tblcases.CaseCommission) As Costs
From
  tblcontacts Inner Join
  tblcases On tblcontacts.ContactID =
    tblcases.ContactAssignedTo
Group By
  tblcontacts.ContactFullName
WITH RollUP

Refer here for more details

答案 2 :(得分:0)

如果要循环遍历PHP中的结果集以进行显示,则可以在循环中对列进行求和。

例如

$sql = "your SQL here";

$query = mysql_query($sql);

$sum_records = $sum_costs = 0;

while ($r = mysql_fetch_object($query))
{
    // your other code here for whatever you're doing with the results
    $sum_records += $r->Records;
    $sum_costs += $r->Costs; 
}

// Now you have the two totals in $sum_records and $sum_costs.