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.