2017-04-25 108 views
0

后,这是我的代码现在:2位小数点纯SQL

SELECT 
j.job_title, 
ROUND(CAST(SUM(j.salary)/COUNT(j.id)as float)) as average_salary, 
COUNT(p.id) as total_people, 
ROUND(CAST(SUM(j.salary)/2 as float)) as total_salary 
FROM people p 
JOIN job j on p.id=j.people_id 
GROUP BY j.job_title 
ORDER BY average_salary desc; 

上average_salary显示没有小数结果。没有CAST,结果显示超过5位小数。如何更改我的代码以使其仅显示小数点后的两位数字?

我已经尝试了其他几个代码,如使用十进制(16,2)或数字(16,2)而不是浮动,但它似乎不工作。

我想要这个纯SQL。谢谢

+0

用你正在使用的数据库标记你的问题。 –

回答

1

而不是ROUND()转换为DECIMAL()。事情是这样的:

SELECT j.job_title, 
     CAST(AVG(j.salary) as DECIMAL(16, 2)) as average_salary, 
     COUNT(p.id) as total_people, 
     CAST(SUM(j.salary)/2 as DECIMAL(16, 2)) as total_salary 

如果你想使用ROUND()然后使用它之前转换为十进制,而不是之后。

+0

我试过你的选择:CAST(SUM(j.salary)/ 2 as DECIMAL(16,2))as total_salary 但是,这给了我结果0.420943E .... – tryAnroid

+0

@tryAnroid。 。 。这似乎很奇怪。你使用什么工具? 'cast()'应该在第二个之后消除任何小数。 –

+0

我用:: FLOAT而不是CAST,工作,因为我想:) – tryAnroid

0

试试这个:

SELECT 
j.job_title, 
CONVERT(NUMERIC(15,2), SUM(j.salary)/COUNT(j.id)) as average_salary 

感谢

0

试试这个:

ROUND(SUM(j.salary)/COUNT(j.id), 2) as average_salary 

如果你想要的结果为float,尝试:

SELECT CAST(SUM(j.salary)/COUNT(j.id) AS NUMERIC(10,2)) as average_salary 

SELECT CAST(round(SUM(j.salary)/COUNT(j.id),2) AS NUMERIC(10,2)) as average_salary 

SELECT CAST(round(SUM(j.salary)/COUNT(j.id),2) AS DECIMAL(10,2)) as average_salary 

注意,答案可能没有零显示,在小数点后第二位是0的情况下,取决于您使用的数据库平台上。

其中一个应该工作。