Ваш вопрос не о другом / лучшем решении вашего запросано о неправильных результатах, которые вы получите, используя скобки, верно?Потому что:
sum(case when elevation >= 2000 then 1 else 0 end)
приводит к целому числу, а count(*)
по определению является целым числом.Разделение между ними является целочисленным разделением, усекающим любые десятичные цифры.Таким образом, вы получаете 0
вместо 0.5
или 0.05
.Чтобы избежать подобных ситуаций, вы можете умножить на действительное число, как вы: 100.0
сначала, а затем разделить.Или вы можете сделать это:
sum(case when elevation >= 2000 then 1.0 else 0.0 end)
, что приведет к сумме, которая является числом с плавающей запятой.В любом случае убедитесь, что хотя бы один из операндов деления является действительным числом .