Ответ
Агрегатные функции в SQL выполняют вычисления над набором значений и возвращают одно результирующее значение. Они часто используются с оператором GROUP BY для группировки данных.
Основные функции:
COUNT(): Подсчитывает количество строк.COUNT(*)считает все строки, аCOUNT(column)— строки, гдеcolumnне равенNULL.SUM(): Вычисляет сумму всех значений в числовом столбце.AVG(): Вычисляет среднее значение в числовом столбце.MAX()/MIN(): Находят максимальное и минимальное значение в столбце.GROUP_CONCAT()(MySQL) илиSTRING_AGG()(PostgreSQL): Объединяет значения из нескольких строк в одну строку с указанным разделителем. Очень полезна для получения списков связанных сущностей в одном запросе.
Пример использования в Go:
// Запрос для получения средней зарплаты и количества сотрудников по отделам
rows, err := db.Query(`
SELECT department, AVG(salary), COUNT(*)
FROM employees
GROUP BY department
`)
if err != nil {
log.Fatal(err)
}
// ... дальнейшая обработка результата
В NoSQL базах данных, таких как MongoDB, похожая функциональность достигается с помощью Aggregation Pipeline и операторов $group, $sum, $avg и т.д.
Ответ 18+ 🔞
Слушай, а вот эти ваши агрегатные функции в SQL — это вообще огонь, если честно. Ну то есть, они берут кучу значений и выдают тебе один, ёпта, итоговый результат. Как будто ты с друзьями в баре скидываешься на кальян, а потом один идиот считает, кто сколько должен. Вот это они и делают, только без мата и обид.
Особенно они любят прикинуться к оператору GROUP BY, чтобы данные по группам раскидать. Без него они всю таблицу как один большой комок и посчитают, что тоже иногда полезно, но не так изящно.
Вот главные затейники:
COUNT(): Считает, сколько строк нагнулось под твоим запросом.COUNT(*)— всех подряд, аCOUNT(column)— только тех, у кого в этой колонке неNULL. То есть, если там пустота — он такую строку в зачёт не берёт, хитрая жопа.SUM(): Берёт все цифры в столбце и складывает их. Проще пареной репы, но без неё никуда.AVG(): Вычисляет среднюю температуру по больнице. Сумму всех делит на их количество. Главное — не пытайся среднее арифметическое от имён сотрудников посчитать, получишь пиздец и ошибку.MAX()/MIN(): Находят самого большого и самого маленького в стаде. Кто зарплату больше всех получает, а кто меньше всех работает — они мгновенно вычислят.GROUP_CONCAT()(в MySQL) илиSTRING_AGG()(в PostgreSQL): А вот это, блядь, магия чистой воды! Берёт значения из кучи строк и склеивает в одну строку через разделитель. Представь, тебе нужно получить всех сотрудников отдела в одну строчку через запятую. Без этого пришлось бы городить огород в коде, а тут — раз, и готово. Просто ебушки-воробушки!
Ну и как это в коде на Go выглядит, смотри:
// Запрос, чтобы узнать, кто сколько в среднем получает и сколько их, по отделам
rows, err := db.Query(`
SELECT department, AVG(salary), COUNT(*)
FROM employees
GROUP BY department
`)
if err != nil {
log.Fatal(err) // Если запрос наебнулся — логируем и в утиль
}
// ... а дальше уже выгребаешь результат и делаешь с ним что хочешь
А в этих ваших модных NoSQL базах, типа MongoDB, там вообще своя атмосфера. Там нет SQL, зато есть Aggregation Pipeline, где ты как в конструкторе цепочку операторов выстраиваешь: $group, $sum, $avg. Принцип тот же, но выглядит так, будто ты не базу данных запрашиваешь, а ритуал чёрной магии проводишь. Но в целом, тоже ничего, работает.