كيف يمكنني حساب النسب المئوية بالكسور العشرية في SQL؟
سؤال
كيف يمكنني تحويل هذا إلى رقم عشري في 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