あなたは物事を複雑にしすぎています。これらの2つのクエリを結合する必要はありません(そして、自然なから離れている必要があります。 参加)、あなたはそれらを組み合わせる必要があるだけです。 min()
およびmax()
同じクエリ内で使用できるため、両方を評価するために2つのクエリを実行する必要はありません。
また、CTE定義をネストする必要はなく、次々に書き込むことができます。
だからこのようなもの:
with quant_table as (
select month, prod, sum(quant) as sum_q
from sales
group by month, prod
), min_max as (
select month, max(sum_q) as max_q, min(sum_q) as min_q
from quant_table
group by month
)
select t1.*
from quant_table t1
join min_max t2
on t2.month = t1.month
and t1.sum_q in (t2.min_q, t2.max_q)
order by month, prod;
条件and t1.sum_q in (t2.min_q, t2.max_q)
and (t2.max_q = t1.sum_q or t2.min_q = t1.sum_q)
と書くこともできます。 。
上記は、group by
を組み合わせることでさらに簡略化できます。 ウィンドウ関数
を使用 単一のクエリで合計、最小、最大の計算を行います:
with min_max as (
select month, prod,
sum(quant) as sum_q,
max(sum(quant)) over (partition by month) as max_q,
min(sum(quant)) over (partition by month) as min_q
from sales
group by month, prod
)
select month, prod, sum_q
from min_max
where sum_q in (max_q, min_q)
order by month, prod;