याद रखने वाली पहली बात यह है कि विंडो वाले फ़ंक्शन (जैसे OVER()
क्लॉज) क्वेरी के परिणाम पर काम करते हैं। वह है:सर्वर पहले क्वेरी को निष्पादित करता है और उसके बाद ही आपके द्वारा परिभाषित विंडो वाले फ़ंक्शन को लागू करता है।
इसका मतलब है कि आप वास्तव में एक ही क्वेरी में विंडोड फ़ंक्शन और समूह द्वारा क्लॉज का उपयोग कर सकते हैं, लेकिन आपको इसे इस तरह से एनकैप्सुलेट करने की आवश्यकता है:
SELECT department_id,
min(min(salary)) OVER (partition by department_id) as minsalary
FROM employees
GROUP BY department_id;
हालांकि, मैं मानता हूं कि विंडोड फ़ंक्शन का उपयोग करने के लिए यह एक अच्छी जगह नहीं है। मैट का प्रस्ताव यहां सबसे अच्छा है (ROW_NUMBER()
CTE
में या subquery
, फिर मुख्य SELECT
. में केवल वांछित पंक्तियों का चयन करें )।