मैं एक टेबल से औसत खोजने के लिए एक प्रश्न लिख रहा था। तालिका में एक ही कॉलम था जिसमें लगातार प्राकृतिक संख्याएं 1 से 106 थीं।
CREATE TABLE med
AS (SELECT rs
FROM ( SELECT rownum rs
FROM employees
WHERE employee_id<=106));
मैंने इस 106 प्राकृतिक संख्याओं के औसत को 53.5 के रूप में खोजने के लिए सफलतापूर्वक क्वेरी निष्पादित की
SELECT AVG(median)
FROM (
SELECT a.rs median
FROM med a,
med b
GROUP BY a.rs
HAVING SUM(CASE
WHEN b.rs<=a.rs THEN 1
ELSE 0
END)>=(COUNT(*)/2)
AND SUM(CASE
WHEN b.rs>=a.rs THEN 1
ELSE 0
END)>=(COUNT(*)/2));
लेकिन इस तरह सबक्वायरी का उपयोग किए बिना कुल कार्य एवीजी का उपयोग करने पर:
SELECT AVG(a.rs) median
FROM med a,
med b
GROUP BY a.rs
HAVING SUM(CASE
WHEN b.rs<=a.rs THEN 1
ELSE 0
END)>=(COUNT(*)/2)
AND SUM(CASE
WHEN b.rs>=a.rs THEN 1
ELSE 0
END)>=(COUNT(*)/2)
तो यह अपेक्षित आउटपुट 53.5 के रूप में नहीं देता है बल्कि यह 53, 54 के रूप में आउटपुट देता है। ऐसा क्यों?
उत्तर:
जवाब के लिए 0 № 1ऐसा इसलिए है क्योंकि सबक्वायरी के साथ आपकी पहली क्वेरी में, आप 53 और 54 के मानों के बीच औसत की गणना कर रहे हैं।
सबक्वायरी के बिना आपकी दूसरी क्वेरी पर एकत्रीकरण फ़ंक्शन निष्पादित किया जाता है लेकिन यह अलग-अलग मान पर किया जाता है, जिसका अर्थ है एवीजी (53) और एवीजी (54)। यही कारण है कि आप 2 पंक्तियों को वापस प्राप्त कर रहे हैं।
मुझे उम्मीद है कि यह आपको स्पष्ट है।