आप जटिल चीजों से अधिक हैं। आपको उन दो प्रश्नों में शामिल होने की आवश्यकता नहीं है (और वास्तव में प्राकृतिक . से दूर रहना चाहिए join), आपको केवल उन्हें संयोजित करने की आवश्यकता है। min()
और max()
एक ही क्वेरी के अंदर इस्तेमाल किया जा सकता है, दोनों का मूल्यांकन करने के लिए दो प्रश्नों को चलाने की आवश्यकता नहीं है।
आपको सीटीई परिभाषाओं को नेस्ट करने की भी आवश्यकता नहीं है, आप बस एक के बाद एक लिख सकते हैं।
तो कुछ इस तरह:
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;