相关文章推荐
有爱心的松鼠  ·  postgres 数据库 sql ...·  1 年前    · 
文雅的炒饭  ·  Power BI Desktop ...·  11 月前    · 
霸气的烈马  ·  如何在Google ...·  1 年前    · 
听话的麻辣香锅  ·  Ruby on ...·  1 年前    · 

sql round函数踩坑

一、round()函数的作用

ROUND(x) 函数返回最接近于参数 x 的整数;ROUND(x,y) 函数对参数x进行四舍五入的操作,返回值保留小数点后面指定的y位。

二、round()函数的用法

round(-6.6)round(6.4)round(6.666,2)round(6,2)round(6,-1)
-766.676.0010
如果传入1个参数值,将参数x四舍五入后得到相应结果;
如果传入两个参数,第一位x为数值,第二位y表示精度。
将参数x四舍五入后得到保留小数点后y位的值,x值的小数位不够y位的补零;
y为负值,则保留小数点左边y位,先进行四舍五入操作,再将相应的位数值取零。

三、踩坑内容

这里是根据我自己的需求对round()的使用。需要对一个table表进行分组后统计每一组的数量,然后再计算出对应总数的百分比。使用到了round()保留小数精度的内容。

	//错误演示
	select concat(round((10/20)*100,2),'%') as per

用上述代码得到的结果是这样的:

原因是在使用除法'/'的时候是向下取整的,所以10/20的结果是'0',为了避免这个情况应该先确保被除数的绝对值大小是大于除数的,
因为我需要的是百分数(%)所以先对被除数扩大100倍再做处理。

下面就把我自己做的内容展示一下把。统计相同年龄的学生占比情况。

注意:这里我使用的是postgres数据库,里面的group by和mysql的条件有点区别,详细的可以参考我同系列的其他文章。

这个sql写的不太好,后面的时候想到有些做的不合适,考虑到时间问题大家就参考部分内容就行。

select f.age, f.numble, concat(round(f.numble/f.total, 2),'%') as per 
	(	select a.age, count(1) as numble, a.total
			(	select age, total 
				from table1 t cross join 
					(	select count(1) as total 
						from table1 ) as b
			) as a
		group by a.age,a.total
	) as f

运行结果如下:

雷王来踩坑 踩雷首席执行官
粉丝