Postgresql में मेरा जवाब नहीं दे रहा (/)


85

मेरे पास एक तालिका softwareऔर कॉलम है dev_cost, जैसे sell_cost। यदि dev_cost16000 है और sell_cost7500 है।

मैं किस तरह से सॉफ़्टवेयर की मात्रा को पुनर्प्राप्त करने के लिए बेचा जा सकता हूं dev_cost?

मैंने नीचे बताया है:

select dev_cost / sell_cost from software ;

यह उत्तर के रूप में 2 लौट रहा है। लेकिन हमें 3 प्राप्त करने की आवश्यकता है, है ना?

उसके लिए प्रश्न क्या होगा? अग्रिम में धन्यवाद।


अगर sell_cost 7500 है, तो हमें dev_cost अर्थात 16000 को पुनर्प्राप्त करने के लिए 3 सॉफ़्टवेयर बेचने की आवश्यकता है। यह मेरा सवाल है
zeewagon

4
कोशिशselect ceil(16000::numeric/7500)
विवेक एस।

इसने काम कर दिया। धन्यवाद विंग्डपैंथर :)
ज़ेगावन

1
सॉफ्टवेयर से चयन छत (dev_cost :: संख्यात्मक / sell_cost);
zeewagon 5

जवाबों:


144

आपके कॉलम में पूर्णांक प्रकार होते हैं, और पूर्णांक विभाजन शून्य की ओर परिणाम को काटता है । सटीक परिणाम प्राप्त करने के लिए, आपको फ्लोट या दशमलव में कम से कम एक मान डालना होगा :

select cast(dev_cost as decimal) / sell_cost from software ;

या केवल:

select dev_cost::decimal / sell_cost from software ;

फिर आप ceil()फ़ंक्शन का उपयोग करके निकटतम पूर्णांक तक परिणाम को गोल कर सकते हैं :

select ceil(dev_cost::decimal / sell_cost) from software ;

( SQLField पर डेमो देखें ।)


हम पैसे की बात कर रहे हैं। दशमलव के लिए, नाव नहीं।
माइक शेरिल 'कैट रिकॉल'

@ माइक: अच्छा बिंदु, हालांकि ओपी के मामले में बात करने की संभावना नहीं है। (वे सभी पूछ रहे हैं कि पूर्णांक विभाजन है, जो गोल है; फ़्लोट्स उसके लिए एक मध्यवर्ती प्रकार के रूप में ठीक काम करेगा, कम से कम जब तक कि मूल मूल्य बड़े चिह्न नहीं हैं।) फिर भी, निश्चित।
इल्मरी करोनें

@IlmariKaronen धन्यवाद! आपके जवाब से मुझे मदद मिली।
एमआरएच

2
@ मेर: सहायता की खुशी। :) BTW, उन उत्तरों पर टिप्पणी करने के बजाय जो आपको उपयोगी लगते हैं, आप उन्हें उत्तर के ऊपरी बाएं कोने में ऊपर की ओर इंगित करने वाले त्रिकोण आइकन पर क्लिक करके वोट कर सकते हैं। यह उत्तरदाता को प्रतिष्ठा बिंदुओं के साथ पुरस्कृत करेगा और उन्हें बताएगा कि उनके उत्तर की सराहना की जाती है, और यह पृष्ठ के शीर्ष पर सर्वोत्तम उत्तरों को बढ़ाने में
इल्मरी करोनें

9

आप वांछित आउटपुट प्राप्त करने के लिए पूर्णांक प्रकार का numericउपयोग कर सकते हैं और ceil()फ़ंक्शन का उपयोग कर सकते हैं

PostgreSQL Ceil फ़ंक्शन सबसे छोटे पूर्णांक मान देता है जो किसी संख्या से अधिक या उसके बराबर है।

SELECT 16000::NUMERIC / 7500 col 
      ,ceil(16000::NUMERIC / 7500) 

परिणाम:

col                  ceil 
------------------   ---- 
2.1333333333333333     3    

तो आपकी क्वेरी होनी चाहिए

select ceil(dev_cost::numeric/sell_cost) 
from software

5

आप अपने चर को वांछित प्रकार में भी डाल सकते हैं, फिर विभाजन को लागू कर सकते हैं:

 SELECT (dev_cost::numeric/sell_cost::numeric);

आप अपने मूल्य को गोल कर सकते हैं, और बिंदु के बाद अंकों की संख्या निर्दिष्ट कर सकते हैं:

SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);

क्या प्रत्येक ऑपरेंड के लिए :: दशमलव का उपयोग करने की कोई वास्तविक आवश्यकता है?
ov

1

यह क्वेरी अगले पूर्णांक में परिणाम देगी

select round(dev_cost ::decimal / sell_cost + 0.5)

यह गलत परिणाम देगा यदि dev_costऐसा होता है कि एक पूर्णांक एकाधिक sell_cost: उदाहरण देखें
इल्मरी करोनें

यह क्वेरी ठीक है। लेकिन अगर तालिका अधिक मान, उदाहरण के लिए, dev_cost 6000 है और sell_cost 400 है, तो उत्तर 15 सही होगा। लेकिन आपकी क्वेरी 16 उत्तर के रूप में देती है। क्या करे? मैं SQL में नया हूं, अगर मैं गलत हूं तो मुझे सुधारो।
ज़ेवागॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.