数据库工程师问题中的浮点值

Last updated: December 12, 2024

概述

当你创建一个数据库工程师问题时,你可以上传一个CSV文件来创建一个表。每个支持的数据库系统对浮点值的处理方式不同。本文提供了一个示例,展示每个数据库系统如何处理浮点值。目前,HackerRank支持Microsoft SQL、MySQL、Oracle和DB2数据库。

浮点值示例

以下示例显示了不同数据库系统如何处理数据。在创建数据库工程师问题时,请考虑查询返回的结果会根据所使用的数据库系统而不同,评分也通过基本的字符串比较来完成。

dbrank.png
名为Employee的表,包含以下CSV,有5列。points列是浮点数。

Id,cid,aid,points,score:
1,5608,1,0.59,4
1,5608,2,8.70,5
1,5608,3,4.99,1
1,5608,5,2.88,3
1,5608,9,0.79,1
1,5608,5,7.58,1
对于查询"SELECT * from Employee",以下数据库以不同方式处理浮点数据:

Oracle
在 Oracle 中,points 列的类型为 FLOAT。输出如下:
1 5608 1 .59 4 
1 5608 2 8.7 5 
1 5608 3 4.99 1 
1 5608 5 2.88 3 
1 5608 9 .79 1 
1 5608 5 7.58 1
Oracle 数据库会修剪前导零。
MySQL
在 MySQL 中,points 列的类型为 FLOAT。输出如下:
1 5608 1 0.59 4 
1 5608 2 8.7 5 
1 5608 3 4.99 1 
1 5608 5 2.88 3 
1 5608 9 0.79 1 
1 5608 5 7.58 1
MySQL 按照提供的数据打印。
MS SQL
在 MS SQL 中,points 列的类型为 REAL。输出如下:
1 5608 1 0.58999997 4 
1 5608 2 8.6999998 5 
1 5608 3 4.9899998 1 
1 5608 5 2.8800001 3 
1 5608 9 0.79000002 1 
1 5608 5 7.5799999 1
MS SQL 打印近似值。使用数据类型 DECIMAL(10,精度)来固定输出中所需的小数位数。如果你修改了我们从 CSV 生成的架构创建 SQL,使得 points 列为 DECIMAL(10, 2),输出将变为:
1 5608 1 .59 4 
1 5608 2 8.70 5 
1 5608 3 4.99 1 
1 5608 5 2.88 3 
1 5608 9 .79 1 
MS SQL 会去除前导零。
DB2
在 DB2 中,points 列的类型为 DECFLOAT。输出如下:
1 5608 1 0.59 4 
1 5608 2 8.7 5 
1 5608 3 4.99 1 
1 5608 5 2.88 3 
1 5608 9 0.79 1 
1 5608 5 7.58 1
DB2 按照提供的数据打印。