APPROX_COUNT_DISTINCT()
SQL सर्वर 2019 में पेश किए गए नए कार्यों में से एक है। यह फ़ंक्शन किसी समूह में अद्वितीय गैर-शून्य मानों की अनुमानित संख्या देता है।
मूल रूप से, आप इसका उपयोग किसी बड़ी तालिका या परिणाम सेट में गैर-डुप्लिकेट पंक्तियों की संख्या का अनुमानित अनुमान प्राप्त करने के लिए कर सकते हैं। यह COUNT_BIG()
के समान कार्य करता है और COUNT()
फ़ंक्शन (DISTINCT
. का उपयोग करते समय) क्लॉज), लेकिन यह एक सटीक संख्या के बजाय एक अनुमानित संख्या देता है।
APPROX_COUNT_DISTINCT()
मुख्य रूप से बड़े डेटा परिदृश्यों के उद्देश्य से है। यह एक लाख से अधिक पंक्तियों के साथ बड़े डेटा सेट तक पहुँचने के लिए और एक कॉलम या कॉलम के एकत्रीकरण के लिए डिज़ाइन किया गया है जिसमें कई अलग-अलग मान हैं। यह उन परिदृश्यों के लिए अभिप्रेत है जहां पूर्ण सटीकता की तुलना में जवाबदेही अधिक महत्वपूर्ण है।
माइक्रोसॉफ्ट का कहना है कि फ़ंक्शन कार्यान्वयन 97% संभावना के भीतर 2% त्रुटि दर की गारंटी देता है।
लिखते समय, APPROX_COUNT_DISTINCT()
एक सार्वजनिक पूर्वावलोकन सुविधा है। इसे SQL Server 2019 में पेश किया गया था, जो वर्तमान में पूर्वावलोकन स्थिति में भी है।
ध्यान दें कि Microsoft कहता है कि पूर्वावलोकन सुविधाएँ उत्पादन के उपयोग के लिए अभिप्रेत नहीं हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
APPROX_COUNT_DISTINCT (अभिव्यक्ति)
छवि . को छोड़कर व्यंजक किसी भी प्रकार का हो सकता है , sql_variant , ntext , या पाठ ।
उदाहरण 1 - COUNT() बनाम APPROX_COUNT_DISTINCT
यहां COUNT()
comparing की तुलना करने वाला एक बुनियादी उदाहरण दिया गया है APPROX_COUNT_DISTINCT()
. के साथ :
WideWorldImporters का उपयोग करें; COUNT(OrderLineId) 'वास्तविक गणना', COUNT(DISTINCT OrderLineId) 'वास्तविक विशिष्ट गणना', APPROX_COUNT_DISTINCT(OrderLineId) 'बिक्री से लगभग विशिष्ट गणना' चुनें।परिणाम:
+----------------+--------------------------+--- -----------------------+| वास्तविक गणना | वास्तविक विशिष्ट गणना | लगभग अलग गणना ||----------------+--------------------------+-- -----------------------|| 231412 | 231412 | 238493 | ---------------------+इस मामले में, वास्तविक गणना और वास्तविक विशिष्ट गणना समान है (इसका मतलब यह है कि OrderLineId में कोई डुप्लिकेट नहीं था। कॉलम)।
हालांकि, हम देखते हैं कि
APPROX_COUNT_DISTINCT()
एक अलग मूल्य लौटाया। यह अपेक्षित है, क्योंकि यह केवल एक सन्निकटन देता है।उदाहरण 2 - एक छोटी संख्या
इस उदाहरण में, मैं एक अलग कॉलम निर्दिष्ट करता हूं ( विवरण ) गिनने के लिए:
चुनें COUNT(विवरण) 'वास्तविक गणना', COUNT(DISTINCT विवरण) 'वास्तविक विशिष्ट गणना', APPROX_COUNT_DISTINCT(विवरण) 'लगभग अलग गणना' बिक्री से। ऑर्डरलाइन;परिणाम:
+----------------+--------------------------+--- -----------------------+| वास्तविक गणना | वास्तविक विशिष्ट गणना | लगभग अलग गणना ||----------------+--------------------------+-- -----------------------|| 231412 | 227 | 226 | ---------------------+इस मामले में, वास्तविक गणना और वास्तविक विशिष्ट गणना भिन्न होती है। ऐसा इसलिए है क्योंकि विवरण कॉलम में बहुत सारे डुप्लिकेट मान हैं।
हम देख सकते हैं कि
APPROX_COUNT_DISTINCT()
अभी भी एक अलग मान लौटा है, लेकिन यह बहुत करीब है।जैसा कि बताया गया है,
APPROX_COUNT_DISTINCT()
मुख्य रूप से बड़े परिणाम सेट के लिए अभिप्रेत है। मेरे द्वारा उपयोग किए जाने वाले फ़ंक्शन की परवाह किए बिना यहां वाले छोटे परिणाम सेट जल्दी से चलते हैं।डेटा प्रकार जांचें
APPROX_COUNT_DISTINCT()
अपना परिणाम बिगिंट . के रूप में लौटाता है , इसलिए इस संबंध में यहCOUNT_BIG()
. के समान है की तुलना में यहCOUNT()
. है (जो एक int . लौटाता है ) लेकिन इसकी पुष्टि करते हैं:EXEC sp_describe_first_result_set N'SELECT APPROX_COUNT_DISTINCT(OrderLineId) बिक्री से। ऑर्डरलाइन्स', शून्य, 0;परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
is_hidden | 0column_ordinal | 1नाम | NULLis_nullable | 1system_type_id | 127system_type_name | bigintmax_length | 8सटीक | 19स्केल | 0collation_name | NULLuser_type_id | NULLuser_type_database | NULLuser_type_schema | NULLuser_type_name | NULLassembly_योग्य_टाइप_नाम | NULLxml_collection_id | NULLxml_collection_database | NULLxml_collection_schema | NULLxml_collection_name | NULLis_xml_document | 0is_case_संवेदनशील | 0is_fixed_length_clr_type | 0source_server | NULLsource_database | NULLsource_schema | NULLsource_table | NULLsource_column | NULLis_identity_column | 0is_part_of_unique_key | NULLis_updateable | 0is_computed_column | 0is_sparse_column_set | 0ordinal_in_order_by_list | NULLorder_by_is_descending | NULLorder_by_list_length | NULLtds_type_id | 38tds_लंबाई | 8tds_collation_id | NULLtds_collation_sort_id | शून्यहम देख सकते हैं कि system_type_name बड़ा है . यह हमें बताता है कि हमारी क्वेरी अपने परिणामों को बिगिंट . के रूप में लौटाती है अपेक्षित के रूप में डेटा प्रकार। max_length और परिशुद्धता मान बिगिन्ट . के अनुरूप भी हैं डेटा प्रकार।