トランザクションを記録するテーブルがあります。私は、値2000の丁度4取引を持っているすべてのIDを選択するが、その後その部分が十分に単純である2500別の条件が満たされない限り、条件によって選択します
SELECT t.tuserid, COUNT(*) AS CNT
FROM transactions t
WHERE t.amt = 2000
GROUP BY t.tuserid
HAVING CNT = 4;
の単一のトランザクションを持っているものを除外したいが、私はどのようにわからないんだけどt.amt = 2500のトランザクションを持つ人を効率的に除外します。where句の簡単なサブクエリが最も効率的でしょうか?
SELECT t.tuserid, COUNT(*) AS CNT
FROM transactions t
WHERE t.amt = 2000
AND t.tuserid NOT IN (SELECT x.tuserid FROM transactions x WHERE x.amt=2500)
GROUP BY t.tuserid
HAVING CNT = 4;
トランザクションテーブルが大きく、サブプロセスがこのプロセスを実行する最も効率的な方法であるかどうかはわかりません。
ありがとうございました。関連する列は索引付けされています(わかりやすくするためにここでは省略しています) – Steve