質問

私は次のように最適化する方法を探しています:

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つです。

役に立ちましたか?

解決

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

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

他のヒント

あなたはこのような何かを行うことはできません。

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

、その後、プログラムでの残りの部分を扱う?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top