मैं एक गणना का उपयोग करके कई पंक्तियों में एक इकाई आवंटित कर रहा हूं और परिणामों को एक तालिका में संग्रहीत कर रहा हूं। मैं तब योग () आवंटन और रकम के परिणामस्वरूप संख्याएँ होती हैं जो पूर्ण संख्याएँ नहीं होती हैं। क्या चल रहा है कि कुछ आवंटन दोहराए जाने वाले दशमलव के साथ संख्याओं के रूप में समाप्त हो रहे हैं, और फिर उन लोगों का योग जो पूरी संख्या में वापस नहीं जोड़ते हैं (अला 1/3 + 1/3 + 1/3! = 1) .

मैंने संख्याओं को अलग-अलग प्रारूपों में डालने की कोशिश की है, हालांकि, एथेना दशमलव को कुछ मनमानी सटीकता से गोल करती रहती है जिसके परिणामस्वरूप समस्या होती है।

मैं चाहता हूं कि आवंटन का योग मूल इकाइयों के योग के बराबर हो।

मेरा डेटाबेस एडब्ल्यूएस एथेना है जिसे मैं प्रेस्टो एसक्यूएल भाषा का उपयोग करना समझता हूं।

मेरे आवंटन का उदाहरण:

case
  when count_of_visits = 1 then 1
  when count_of_visits = 2 then .5
  when count_of_visits >= 3 then
       case
         when visit_seq_number = min_visit_seq_number then .4
         when visit_seq_number = max_visit_seq_number then .4
         else .2 / (count_of_visits - 2 )
        end
   else 0
end as u_shp_alloc_leads

इस आवंटन में, पहली और आखिरी यात्राओं को आवंटन का 40% मिलता है और सभी यात्राओं को 20% विभाजित के बीच में मिलता है

एक इकाई जिसे 29 विज़िट के लिए आवंटित किया जा रहा है, वह 20% को 27 से विभाजित करती है जो 0.00740Repeating के बराबर है। तालिका 0.007407407407407408 संग्रहीत कर रही है, जब मैं संख्याओं का योग करने के लिए जाता हूं तो परिणाम 1.0000000000000004 होता है, मैं चाहता हूं कि परिणाम 1 हो

1
drazen90909 19 जुलाई 2020, 01:47

1 उत्तर

सबसे बढ़िया उत्तर

यह सामान्य रूप से डेटाबेस या कंप्यूटर की एक सीमा है। जब आप इस तरह के भिन्नों के साथ काम करते हैं, तो हमेशा किसी न किसी तरह की गोलाई होती रहेगी।

मैं आपके द्वारा अपनी तालिका से प्राप्त राशि पर x-वें दशमलव के लिए गोलाई की एक उचित डिग्री लागू करूंगा, जो अंत में इन अवशिष्ट दशमलवों को काट देगा।

यदि यह आपके लिए पर्याप्त नहीं है, तो कम से कम सैद्धांतिक रूप से पूर्ण सटीकता के लिए आप जो कुछ कर सकते हैं वह है अंश और हर को अलग-अलग दो स्तंभों में संग्रहीत करना। योग की गणना करते समय ( numerator_column/denominator_column ) आप एक ही गोल प्रभाव देखेंगे, इसलिए संख्याओं का योग कुछ इस तरह से कुछ अधिक जटिल होगा:

SELECT sum(numerator_sum/denominator)
FROM (
  SELECT
    denominator,
    sum(numerator) as numerator_sum
  FROM your_allocation_table
  GROUP BY denominator
)
1
Alex 19 जुलाई 2020, 08:00