0

私の問題は、同じクエリでカウントを合計しようとしていると思いますが、これを避けるために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
4

3 に答える 3

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 で総計を計算するよりもパフォーマンスが向上する可能性があります。

于 2012-06-29T12:50:42.190 に答える
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

詳しくはこちら

于 2012-06-29T13:20:14.083 に答える
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.
于 2012-06-29T13:09:04.973 に答える