これを行う簡単な方法の 1 つは、元のクエリをインライン ビューとして使用し、インライン ビューを行ソースとして使用して SELECT ステートメントを記述することです。(MySQL の用語では、インライン ビューは派生テーブルと呼ばれます):
SELECT v.BudgetAmount
, v.Difference
, v.BudgetAmount + v.Difference AS Total
FROM (
-- original query here
SELECT ... IFNULL(bl.amount, '---') AS BudgetAmount,
IFNULL((bl.amount *1) - ( + bal1.amount ), '---') AS Difference
FROM...
) v
他のリレーショナル データベース システムとは異なり、MySQL は実際にインライン ビューを具体化することを強制し (つまり、インライン ビューのクエリが実行され、結果が MyISAM テーブルとして保存されます)、パフォーマンスに影響します。
ただし、これは、他の式で使用する列の別名を参照できる方法です。
(列に割り当てられたエイリアスは、それらが割り当てられている SELECT リストでは参照できません...クエリの HAVING および ORDER BY 句でのみ参照できます。)
単一のクエリで別の列に追加されたこれらの列の値を取得するには、エイリアスを参照できません。次のように式を繰り返す必要があります。
SELECT expr1 AS BudgetAmount
, expr2 AS Difference
, expr1 + expr2 AS Total
FROM ...
エイリアスを参照するには、インライン ビューなど、クエリによって参照される行ソースから取得する必要があります。
SELECT v.BudgetAmount
, v.Difference
, v.foo
, v.BudgetAmount + v.Difference AS Total
FROM ( SELECT expr1 AS BudgetAmount
, expr2 AS Difference
, foo
FROM ...
) v
それがあなたが聞きたかった答えかどうかはわかりませんが、それがその方法です。
編集:
私はあなたが尋ねていることを誤解しました。あなたの質問は、「合計が...の列が欲しい」と言っていました。これは、結果セットに追加の ROW を追加したいという意味ではなく、同じ数の行を返すクエリが必要だったという意味だと思いました。