2011-03-17 11 views
16

को अनदेखा करने के लिए मुझे कॉलम पर एक औसत निष्पादित करने की आवश्यकता है, लेकिन मुझे पता है कि उस कॉलम में अधिकांश मान शून्य होंगे। सभी संभावित पंक्तियों में से केवल दो में सकारात्मक मूल्य होंगे। शून्यों को अनदेखा करने और केवल वास्तविक मूल्यों को औसत करने के लिए मैं अपने एसक्यूएल को कैसे बता सकता हूं?माइस्क्ल AVG शून्य

उत्तर

68

यह मानते हुए कि आप पूरी तरह से इस तरह के पंक्तियों को अलग नहीं करना चाह सकते हैं (शायद वे अन्य स्तंभ में मान आप एकीकृत करना चाहते हैं)

SELECT AVG(NULLIF(field ,0)) 
from table 
+0

धन्यवाद, यह शायद सबसे अच्छा विकल्प होगा क्योंकि हाँ, मेरे पास अन्य कॉलमंस में मूल्य हैं! – Oranges13

+2

यह बहुत अच्छा काम करता है - खासकर जब आपके प्रश्न – Avishai

6

आप शायद नियंत्रित कर सकते हैं कि कहां खंड के माध्यम से:

select avg(field) from table where field > 0 
+0

केवल तभी जब पंक्ति शून्य से अधिक है, तो वे हैं जिनके बारे में मुझे चिंता है। दुर्भाग्यवश इस मामले में, 3 अन्य कॉलम हैं जिन्हें मुझे यह जांचने की आवश्यकता है कि यह मामला क्यों नहीं हो सकता है। – Oranges13

0
select avg(your_column) 
from your_table 
where your_column != 0 
+0

में 1 से अधिक कुल फ़ंक्शन हैं, यह काम करता है, सिवाय इसके कि अन्य फ़ील्ड भी एक बड़े औसत के रूप में एक साथ खींचना चाहते हैं। – Oranges13

0

आप NULL को शून्य में बदल सकते हैं, तो AVG() समारोह नहीं NULL मूल्यों के साथ ही काम करेंगे।

UPDATE table SET column = NULL WHERE column='0'; 
SELECT AVG(column) FROM table; 
+2

येश। 'चयन' कार्य करने के लिए मौजूदा डेटा बदलना? मुझे लगता है कि मैं प्यूक कर रहा हूँ ... –

संबंधित मुद्दे