Wartości zmiennoprzecinkowe w pytaniach dla inżynierów baz danych

Last updated: December 12, 2024

Przegląd

Gdy tworzysz pytanie o Inżyniera Bazy Danych, możesz przesłać plik CSV, aby utworzyć tabelę. Każdy z obsługiwanych systemów baz danych obsługuje wartości zmiennoprzecinkowe w inny sposób. Ten artykuł przedstawia przykład pokazujący, jak każdy system baz danych obsługuje wartości zmiennoprzecinkowe. Obecnie HackerRank obsługuje bazy danych Microsoft SQL, MySQL, Oracle i DB2.

Przykład wartości zmiennoprzecinkowych

Poniższy przykład pokazuje, jak różne systemy baz danych obsługują dane. Tworząc pytanie o Inżyniera Bazy Danych, należy pamiętać, że zapytania zwracają różne wyniki w zależności od używanego systemu baz danych, a ocena jest dokonywana na podstawie podstawowego porównania ciągów znaków.

dbrank.png
Tabela o nazwie Employee z następującym plikiem CSV zawierającym 5 kolumn. Kolumna points jest typu float.

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
Dla zapytania "SELECT * from Employee", następujące bazy danych obsługują dane typu float w następujący sposób:

Oracle
W Oracle, kolumna points jest typu FLOAT. Wynik wygląda następująco:
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
baza danych Oracle obcina wiodące zera.
MySQL
W MySQL, kolumna points jest typu FLOAT. Wynik wygląda następująco:
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 wyświetla dane tak, jak zostały podane.
MS SQL
W MS SQL, kolumna points jest typu REAL. Wynik wygląda następująco:
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 wyświetla przybliżoną wartość. Użyj typu danych DECIMAL (10, precyzja), aby ustalić miejsca po przecinku, które są potrzebne w wyniku. Jeśli zmienisz schemat SQL, który wygenerowaliśmy z CSV, tak aby kolumna points była typu DECIMAL(10, 2), wynik zmieni się na ten:
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 
1 5608 5 7.58 1
MS SQL usuwa wiodące zera.
DB2
W DB2, kolumna points jest typu DECFLOAT. Wynik wygląda następująco:
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 wyświetla dane tak, jak zostały podane.