我试图将平均工资和总工资转换为浮动小数点后2位,但我不断得到一个错误。我做得对吗?
错误:测试失败预期2是一种浮点
SELECT
j.job_title,
SUM(j.salary)/COUNT(p.id)::float, 2 AS average_salary,
COUNT(p.id) AS total_people,
SUM(j.salary):: float, 2 AS total_salary
FROM job j
JOIN people p
ON p.id = j.people_id
GROUP BY j.job_title
ORDER BY total_salary DESC
LIMIT 100
2条答案
按热度按时间2vuwiymt1#
试试下面的,你不见了
round()
周围average_salary
以及total_salary
因为你只是, 2
不使用round()
. 如果你转换SUM(j.salary)
如果是浮动的话,它应该会给你预期的结果。nzkunb0c2#
可以使用浮点,但不能将其设置为特定的小数位数。postgresql中可用的浮点类型有
real
或者double precision
.您可以这样做:
或者,使用
numeric(10,2)
,在哪里10
是精度(总位数)和2
是刻度(小数位数):请注意,必须将表达式中的一个值强制转换为
decimal
,否则将两者都视为int
,并且除法将产生一个整数,因此强制转换为decimal
在那之后就不准确了。例如:
这也适用于
real
类型,其中必须将表达式中的至少一个值强制转换为real
为了得到准确的结果。有关更多信息,请参阅文档:https://www.postgresql.org/docs/12/datatype-numeric.html