Ответ
Нет, агрегатные функции сами по себе не являются антипаттернами. Они полезны для выполнения операций над наборами данных (суммирование, подсчёт, среднее и т.д.). Однако их неоптимальное использование может привести к проблемам:
- Производительность: агрегация больших таблиц без индексов может быть медленной.
- Читаемость: сложные агрегации в коде могут ухудшить понимание логики.
Пример правильного использования в SQL-запросе:
SELECT COUNT(*) as total_users, AVG(age) as avg_age FROM users;
В Go можно использовать агрегацию в коде, если это упрощает логику:
func averageAge(users []User) float64 {
sum := 0
for _, u := range users {
sum += u.Age
}
return float64(sum) / float64(len(users))
}
Ключевое правило: используйте агрегатные функции осознанно, когда они решают задачу оптимально.