将数据类型更改为浮点型并四舍五入到小数点后两位

Mag*_*Liu 2 sql postgresql types casting average

表格:

people(id, name)
job (id, people_id, job_title, salary) 
Run Code Online (Sandbox Code Playgroud)

目标:显示每个独特的工作、总平均工资(浮动并四舍五入到小数点后两位)、总人数和总工资(浮动并四舍五入到小数点后两位)并按最高平均工资排序。

因此,挑战在于将转换类型保持为 float,同时将其四舍五入到小数点后两位。

我已经将其四舍五入到小数点后两位,但它不是浮动的。我已经把它弄到了浮动的位置,但我无法将其四舍五入到小数点后两位。

我的尝试

尝试1:

SELECT 
  distinct(j.job_title) as job_title,
  to_char(AVG(j.salary)::FLOAT, 'FM999999990.00') as average_salary,
  COUNT(p.id) as total_people,
  CAST (SUM(j.salary) AS FLOAT) as total_salary
  FROM people p
    JOIN job j on p.id = j.people_id
  GROUP BY j.job_title
  ORDER BY total_salary
Run Code Online (Sandbox Code Playgroud)

问题:仍然说它不是浮动的

尝试2:

SELECT 
  distinct(j.job_title) as job_title,
  CAST (AVG(j.salary) AS FLOAT) as average_salary,
  COUNT(p.id) as total_people,
  CAST (SUM(j.salary) AS FLOAT) as total_salary
  FROM people p
    JOIN job j on p.id = j.people_id
  GROUP BY j.job_title
  ORDER BY total_salary
Run Code Online (Sandbox Code Playgroud)

问题:未四舍五入到小数点后两位

尝试3:

SELECT 
  distinct(j.job_title) as job_title,
  ROUND (AVG(CAST(j.salary as FLOAT)), 2)) as average_salary,
  COUNT(p.id),
  ROUND (SUM(CAST(j.salary as FLOAT)), 2)) as total_salary
  FROM people p
    JOIN job j on p.id = j.people_id
  GROUP BY j.job_title
  ORDER BY total_salary
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,说我需要添加显式转换类型,这导致我尝试第 1 种方法。

GMB*_*GMB 5

答案取决于 column 的实际数据类型salary。关键点是round()Postgres中不允许floats(仅numeric支持类型)。

如果您正在处理numeric数据类型,那么您可以先round(),然后转换为float

round(avg(salary), 2)::float
Run Code Online (Sandbox Code Playgroud)

如果您正在处理一float列,那么您需要在使用round()它之前转换聚合函数的结果:

round(avg(salary)::numeric, 2)::float
Run Code Online (Sandbox Code Playgroud)