Optimieren Aggregationsanfrage
-
21-09-2019 - |
Frage
ich nach einer Möglichkeit, die folgenden optimieren:
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
Dabei gilt @gid ein Parameter und gid ist ein Indexfeld auf dieser Tabelle. Problem:. Jede Unterabfrage Wiederholungen auf dem gleichen Satz von Einträgen - drei Wiederholungen sind zwei zu viel
Lösung
Sie können wie folgt tun:
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
Andere Tipps
Können Sie nicht etwas tun
SELECT sum(amount),count(1), txnType
FROM Txn_log
WHERE gid = @gid AND
txnType in (3,5,11,20)
group by txnType
und dann behandelt den Rest davon programmatisch?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow