तालिका मैं कितनी बार करता है लेकिन PostgreSQL शिकायत करता है कि कॉलम मैं 9.1gb का उपयोग कर रहा हूं, जो कि उबंटू 12.04 के साथ है। इस प्रश्न के मुकाबले ऐसा कुछ भी हो सकता है। यह अधिक तेज और सरल है: परिणाम: कैसे? आपको इसके लिए फ़ंक्शन की ज़रूरत नहीं है। यह मानता है कि आपके पास यहां पर गिनती कैसे काम करती है: यह नियंत्रित करता है कि आप कर सकते हैं ) डिफ़ॉल्ट रूप से है <कोड> संख्यात्मक करने के लिए गणना करने के लिए मजबूर करने के लिए परिणाम: एक तरफ के रूप में: मैं my_obj में दो पूर्णांक फ़ील्ड हैं:
(मूल्य_एक पूर्णांक, value_b पूर्णांक);
value_a = value_b की गणना करने की कोशिश करता हूं, और मैं प्रति अनुपात में यह अनुपात व्यक्त करना चाहता हूं। यह मैंने कोशिश की है कोड है:
चुनें राशि (मामले जब o.value_a = o.value_b तब 1 और 0 अंत) nb_ok के रूप में, राशि (मामले जब o.value_a! = O Value_b तब 1 और 0 अंत) nb_not_ok, compute_percent (nb_ok, nb_not_ok) my_obj से ओ समूह के रूप में o.property_name;
compute_percent एक संग्रहित कार्यप्रणाली है जो केवल
(a * 100) / (a + b)
nb_ok मौजूद नहीं है।
आप इसे कैसे ठीक से कर सकते हैं? सरल संस्करण
का चयन करें property_name, (गिनती (value_a = value_b या NULL) * 100) / गिनती (*) के रूप में my_obj ग्रुप द्वारा pct 1;
property_name | Pct -------------- + ---- prop_1 | 17 prop_2 | 43
value_b (जो आपको आरंभ करने की आवश्यकता नहीं है) की गिनती के बजाय और कुल की गणना के लिए,
count (*) का उपयोग करें < / कोड> कुल के लिए तेज़, सरल।
NULL मान नहीं है अर्थात। दोनों कॉलम परिभाषित हैं
नहीं नल । आपके प्रश्न में जानकारी गुम है।
यदि नहीं, तो आपकी मूल क्वेरी शायद ऐसा नहीं कर रही है जो आपको लगता है कि यह करता है यदि कोई भी मान नल है, तो आपका संस्करण उस पंक्ति को बिल्कुल भी नहीं गिना जाता है। आप इस तरह से एक विभाजन-दर-शून्य अपवाद भी भड़क सकते हैं।
यह संस्करण नल के साथ भी काम करता है गिनती (*) मानों की परवाह किए बिना, सभी पंक्तियों की गिनती का उत्पादन करती है।
< Code> TRUE या NULL = TRUE FALSE OR NULL = NULL
गिनती () शून्य मानों को अनदेखा करता है वोइलो।
= से पहले
या बांधता है। आप इसे स्पष्ट करने के लिए कोष्ठकों को जोड़ सकते हैं:
गिनती ((value_a = value_b) या गलत)
गिनती के परिणाम प्रकार
गिनती NULLIF (& lt; अभिव्यक्ति & gt ;, FALSE)
bigint । एक डिवीजन
bigint / bigint , आंशिक अंक को घटाता है ।
आंशिक अंक शामिल करें
100.0 (आंशिक अंक के साथ) का उपयोग करें और इस तरह से आंशिक अंकों को संरक्षित करें।
आप इसके साथ उपयोग करना चाह सकते हैं:
का चयन करें property_name, round ((count (value_a = value_b OR null) * 100.0) / count (*), 2) के रूप में pct FROM my_obj ग्रुप BY 1;
property_name | Pct -------------- + ------- prop_1 | 17.23 प्रोपेल | 43.09
valueA के बजाय
value_a का उपयोग करता हूं। PostgreSQL में अनक्ॉटेड मिश्रित-केस पहचानकर्ता का उपयोग न करें। मैंने इस मूर्खता से आने वाले बहुत से निराश प्रश्नों को देखा है यदि आपको आश्चर्य है कि मैं किस बारे में बात कर रहा हूँ, तो मैनुअल में अध्याय पढ़ें।
No comments:
Post a Comment