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 인 경우, 우리는 내 질문 즉> 16000을 dev_cost 예를 복구하는 3 소프트웨어를 판매 할 필요가
zeewagon

4
시도select ceil(16000::numeric/7500)
비벡 S.에게

효과가있었습니다. 감사합니다 :) wingedpanther
zeewagon

1
소프트웨어에서 ceil (dev_cost :: numeric / sell_cost)를 선택합니다. --worked
zeewagon

잊지 마세요 답변을 받아
비벡 S.에게

답변:


143

열에는 정수 유형이 있으며 정수 나누기는 결과를 0으로 자릅니다 . 정확한 결과를 얻으려면 값 중 하나 이상을 float 또는 decimal캐스팅 해야합니다 .

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 ;

( SQLFiddle 데모를 참조하십시오 .)


우리는 돈에 대해 이야기하고 있습니다. 부동 소수점이 아닌 10 진수로 캐스트합니다.
Mike Sherrill 'Cat

@Mike : OP의 경우에는 중요하지 않지만 좋은 지적입니다. (그들이 요구하는 것은 반올림하는 정수 나눗셈입니다. 적어도 원래 값이 bigint가 아니라면 float는 중간 유형으로 잘 작동합니다.) 여전히 고정되어 있습니다.
Ilmari Karonen 2015

@IlmariKaronen 감사합니다! 당신의 대답은 나를 도왔습니다.
MRah

2
@MRah : 도움이되어 기쁩니다. :) BTW, 유용하다고 생각되는 답변에 댓글을 남기는 대신 답변의 왼쪽 상단 모서리에있는 위쪽을 가리키는 삼각형 아이콘을 클릭하여 투표 할 수 있습니다. 이렇게하면 답변자에게 평판 포인트가 주어지고 답변에 감사한다는 것을 알릴 수 있으며 최상의 답변이 페이지 상단으로 올라가는데도 도움이됩니다.
Ilmari Karonen

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);

각 피연산자에 :: decimal을 사용할 필요가 있습니까?
오븐

1

이 쿼리는 결과를 다음 정수로 반올림합니다.

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

경우에 잘못된 결과를 줄 것이다 dev_cost의 정수 배가 될 일 sell_cost: 참조 예 .
Ilmari Karonen 2015

이 쿼리는 괜찮습니다. 그러나 테이블에 더 많은 값이있는 경우, 예를 들어 dev_cost가 6000이고 sell_cost가 400이면 대답 15가 맞을 것입니다. 그러나 귀하의 쿼리는 답으로 16을 제공합니다. 우리는 무엇을해야합니까? 나는 SQL에 익숙하지 않다. 내가 틀렸다면 나를 수정하라.
zeewagon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.