Я подозреваю, что все это связано с типами данных, используемыми в расчетах.
Если 'rank' и 'program_count' представляют собой смесь целых и десятичных чисел, то SUM () вернет десятичное значение, в противном случае вернет значение с плавающей точкой. В противном случае SUM () даст число с плавающей запятой или двойное число.
В SQL float и double являются приблизительными значениями, вы можете определить уровень точности с помощью ключевого слова Float.
В вашей таблице, какие типы данных являются различными столбцами?