SQL查询统计行程时长时如何移除返回结果的小数部分
如何移除SQL聚合查询结果的小数部分
你当前使用的查询逻辑如下:
SELECT AVG(ride_length) AS average_ride_length, MAX(ride_length) AS max_ride_length FROM trips_2015_q1
由于AVG()聚合函数默认会返回浮点/高精度数值类型,结果会自带小数部分,可以通过取整函数实现移除小数的需求,根据你需要的取整规则选对应写法即可:
- 如果
ride_length字段本身是整数类型,MAX()取最大值的结果天然是整数,不需要额外套函数处理。
方案1:截断小数(不四舍五入,直接丢弃小数位)
直接使用对应数据库的向下取整/截断函数即可:
- 适用MySQL、PostgreSQL、SQL Server的写法:
SELECT FLOOR(AVG(ride_length)) AS average_ride_length, MAX(ride_length) AS max_ride_length FROM trips_2015_q1
- 适用Oracle的写法:
SELECT TRUNC(AVG(ride_length)) AS average_ride_length, MAX(ride_length) AS max_ride_length FROM trips_2015_q1
你也可以通过强制类型转换实现相同效果,比如MySQL中用CAST(AVG(ride_length) AS UNSIGNED)、PostgreSQL中用AVG(ride_length)::INTEGER、SQL Server中用CAST(AVG(ride_length) AS INT),都会直接截断小数返回整数。
方案2:四舍五入后取整
如果需要按数学规则四舍五入后去掉小数,所有主流SQL数据库都支持ROUND()函数,传入第二个参数为0即代表保留0位小数:
SELECT ROUND(AVG(ride_length), 0) AS average_ride_length, MAX(ride_length) AS max_ride_length FROM trips_2015_q1
内容的提问来源于stack exchange,提问作者Raheem Brown
相关产品推荐
相关产品推荐

