Transact-SQL funkce AVG() na sloupci typu INT vrací typ ... ?

Hádejte ...

LINQ extension metoda Enumerable.Average pro enumerátor hodnot typu Int32 vrací logicky typ Double. Co ovšem taková Transact-SQL funkce AVG() pro výraz typu INT ? Překvapivě opět INT místo očekávaného FLOAT ! To vede samozřejmě k neočekávaným chybám při výpočtech. Jiné Transact-SQL funkce jsou v tomto dokonce ještě nekonzistentní.

Pokud si pro unit test kódu ve kterém se pak volá tato Transact-SQL funkce AVG() vyberete zrovna hodnoty jako (5,5,1,1) kde je náhodou výsledkem celé číslo, tak se tato chyba v takovém testu ani neprojeví. Je tedy vhodné vybírat takové hodnoty, aby se otestoval i tento případ.

 

Komentáře jsou uzavřeny