문제

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

적어도 MySQL에서 (도움이되는 경우) 플로트 번호를 사용하려면 일반 int 필드가 아닌 유형 플로트 필드를 사용해야합니다.

100에 소수점을 추가하십시오

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

이로 인해 모든 처리가 플로트에서 발생하도록 강요합니다 ... 최종 출력을 텍스트로 원하고 소수점 이하의 장소로 표시하기 위해 잘린 경우 STR 기능을 사용하십시오.

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이라면 여기에 코드를 넣어야합니다.

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

이것은 소수점을 반환하고 라운드는 그것을 한 자리로 반올림합니다. 따라서 귀하의 경우에는 76.6을 얻을 수 있습니다. 숫자를 원하지 않으면 숫자를 1에서 0으로 변경하고 두 자리 숫자를 원한다면 2로 변경하십시오.

이것으로, 라운드와 str 또는 ()를 시도하십시오. 나는 이것을 더 간단한 방법으로 발견했다.

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 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 ((100 * [Totalvisit1]/[Totalvisits]), 1) visit1percent로

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top