вообще-то group by ~= distinct тут в любом случае будет производиться вычисление функции для каждой строки, однако count(distinct(функция)) в этом случае с моей точки зрения немного хуже чем sum(функция) по производительности (хотя правильнее - замерить), и сильно хуже в плане понимания происходящего.