1

簡単なクエリがあります

select id,
(select sum(totalin) from xorderextra where xorderextra.id = xoi.id) as totalin,
from xorderinfo xoi
group by xoi.id
having (select sum(totalin) from xorderextra where xorderextra.id = xoi.id) > 1000

ここで、having ステートメントで sum フィルターを置き換えるより良い方法があることを知りたいと思います。これは物事をセットアップするための適切な方法ですか、これはクエリを傷つけますか。数値を2回合計する必要がありますか?

*新しいケース *

select xoi.id,
       sum(xex.totalin) as totalin,
       sum(xooc.totalout) as totalout,
from xorderinfo xoi
inner join xorderextra xex on xex.id = xoi.id
inner join xorderout xoo on xoo.rid = xoi.id
inner join xorderoutcalc xooc on xooc.obracunid = xoo.obracunid
group by xoi.id
having sum(xex.totalin) > 1000

これは間違った結果を返しています。これを修正するにはどうすればよいですか?

4

2 に答える 2

1

結合を行うと、パフォーマンスが劇的に向上します!

select id,
       sum(xex.totalin) as totalin,
from xorderinfo xoi
inner join xorderextra xex on xorderextra.id = xoi.id
group by xoi.id
having sum(xex.xorderextra) > 1000
于 2012-05-15T12:19:51.317 に答える
1

cte と を使用して書き直すことができますSUM OVER

WITH cte AS(
    SELECT id
    ,      SUM(xoi.totalin) OVER (PARTITION BY xoi.id) As TotalIn
    FROM xorderinfo xoi
)
SELECT cte.* FROM cte
WHERE TotalIn > 1000
于 2012-05-15T12:20:07.920 に答える