كيف يمكنني حساب النسب المئوية بالكسور العشرية في SQL؟

StackOverflow https://stackoverflow.com/questions/400557

  •  03-07-2019
  •  | 
  •  

سؤال

كيف يمكنني تحويل هذا إلى رقم عشري في SQL؟فيما يلي المعادلة وحصلت على الإجابة على أنها 78 (عدد صحيح) ولكن الإجابة الحقيقية هي 78.6 (مع علامة عشرية) لذا أحتاج إلى إظهار ذلك وإلا فلن يصل التقرير إلى 100٪

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
هل كانت مفيدة؟

المحلول

convert(decimal(5,2),(100 * convert(float,[TotalVisit1])/convert(float,[TotalVisits]))) AS Visit1percent

والقبيح، ولكنه يعمل.

نصائح أخرى

وجرب هذا:

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

وعلى الأقل في الخلية (إذا كان ذلك يساعد)، إذا كنت ترغب في استخدام أرقام تعويم كان لديك لاستخدام حقل نوع تعويم، وليس الحقول كثافة العمليات العادية.

وأضيف عشري إلى 100

(100.0 * [TotalVisit1]/[TotalVisits]) AS Visit1percent

وهذا يفرض تجهيز جميع أن يحدث في يطفو ... إذا كنت تريد أن الناتج النهائي كنص، واقتطاع لعرض عشرية واحدة فقط، استخدم وظيفة شارع

Str( 100.0 * [TotalVisit1]/[TotalVisits], 4, 1 ) AS Visit1percent
CAST(ROUND([TotalVisit1]*100.0/[TotalVisits],2)as decimal(5,2)) as Percentage

و
ليس قبيحا والعمل بشكل أفضل وسريع، واستمتع به!

ه على الأرجح مبالغة للقيام بذلك، ولكن قد ترغب في النظر في صب كل القيم ليطفو لضمان الدقة في جميع المراحل.

(100.0 * ( [TotalVisit1]+0.0 )/([TotalVisits]+0.0) ) as Visit1percent

ملحوظة، كنت حقا بحاجة الى وضع التعليمات البرمجية هنا للقضية التي TotalVisits == 0 أو ستحصل على القسمة على 0 الجواب.

SELECT(ROUND(CAST(TotalVisit1 AS DECIMAL)/TotalVisits,1)) AS 'Visit1percent'

وهذا سيعود عشري وسوف مستدير إلى رقم واحد. حتى في قضيتك سوف تحصل على 76.6. إذا كنت لا تريد أي تغيير الأرقام 1-0، وإذا كنت تريد رقمين تغييره إلى 2.

وحاول مع هذا، لا الجولة وشارع أو أكثر (). لقد وجدت في ذلك أبسط طريقة لتحقيق ذلك.

cast((count(TotalVisit1) * 100.0) /TotalVisits as numeric(5,3))  as [Visit1percent]

يمكنك تغيير عدد النقاط العشرية كما يحلو لك ل

<اقتباس فقرة>   

ومنها مثلا. رقمية (5،2) أو رقمية (5،4)

وهذا قد لا أخاطبكم إصدار مباشرة، ولكن عند تقريب مجموعة من الأرقام للعرض كنت أبدا مضمونة للحصول على الأرقام التي تضيف إلى 100 إلا إذا كنت تأخذ احتياطات خاصة. على سبيل المثال، التقريب 33.33333، 33.33333 33.33333 وسوف أترك لكم واحدة قصيرة على المبلغ، وبالتالي فإن الشيء المنطقي القيام به هو تعديل نسبة لأكبر قيمة في مجموعة لمراعاة أي اختلاف.

وإليك طريقة للقيام بذلك في Oracle SQL باستخدام الدوال التحليلية والعوملة فرعي (WITH) شرط لتوليد بيانات العينة.

with data as (select 25 num from dual union all
              select 25     from dual union all
              select 25     from dual)
select num, 
case
   when rnk = 1
   then 100 - sum(pct) over (order by rnk desc
                             rows between unbounded preceding
                                      and         1 preceding)
   else pct
end pct
from
   (
   select num,
          round(100*ratio_to_report(num) over ()) pct,
          row_number() over (order by num desc) rnk
   from data
   )
/


NUM                    PCT                    
---------------------- ---------------------- 
25                     33                    
25                     33                     
25                     34                     

في MS Access، يمكنك استخدام وظيفة SQL ROUND (الرقم، عدد الكسور العشرية)، وسوف تقوم بتقريب الرقم إلى العدد المحدد من الكسور العشرية:

ROUND((100 * [TotalVisit1]/[TotalVisits]),1) AS Visit1percent

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top