1

私は以下を最適化する方法を探しています:

SELECT 
    (SELECT SUM(amount) FROM Txn_Log WHERE gid=@gid AND txnType IN (3, 20)) AS pendingAmount,
    (SELECT COUNT(1) FROM Txn_Log WHERE gid = @gid AND txnType = 11) AS pendingReturn,
    (SELECT COUNT(1) FROM Txn_Log WHERE gid = @gid AND txnType = 5) AS pendingBlock

ここで、@ gidはパラメーターであり、gidはこのテーブルのインデックスフィールドです。問題:各サブクエリは同じエントリのセットで再実行されます-3回の再実行は2回多すぎます。

4

2 に答える 2

4

あなたはこのようにすることができます:

select
   sum(case when txnType in (3,20) then amount else 0 end) as pendingAmount,
   sum(case txnType when 11 then 1 else 0 end) as pendingReturn,
   sum(case txnType when 5 then 1 else 0 end) as pendingBlock
from
   Txn_Log
where
   gid = @gid
于 2009-11-19T11:08:23.617 に答える
1

あなたはこのようなことをすることはできません

SELECT sum(amount),count(1), txnType
FROM Txn_log
WHERE gid = @gid AND
    txnType in (3,5,11,20)
group by txnType

その後、プログラムで残りを処理しますか?

于 2009-11-19T11:09:49.713 に答える