COUNT, SUM складывает числа, MIN и MAX берут крайние значения столбца.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpDbAgg 611 of 696 menu
◀ ▶

Сводные функции SQL в SQLite

Агрегаты сжимают множество строк в одно значение.

Число строк считает COUNT, SUM складывает числа, MIN и MAX берут крайние значения столбца. Несколько функций можно запросить в одном SELECT с псевдонимами для чтения по номерам столбцов:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("stats.db", &db) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } char* err = nullptr; if (sqlite3_exec( db, "CREATE TABLE IF NOT EXISTS loads (" "id INTEGER PRIMARY KEY," "kg INTEGER NOT NULL" ")", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } if (sqlite3_exec( db, "INSERT INTO loads (kg) VALUES (10)", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } if (sqlite3_exec( db, "INSERT INTO loads (kg) VALUES (25)", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } if (sqlite3_exec( db, "INSERT INTO loads (kg) VALUES (15)", nullptr, nullptr, &err ) != SQLITE_OK) { std::cerr << err << "\n"; sqlite3_free(err); sqlite3_close(db); return 1; } sqlite3_stmt* stmt = nullptr; if (sqlite3_prepare_v2( db, "SELECT COUNT(*) AS cnt, SUM(kg) AS total, " "MIN(kg) AS light, MAX(kg) AS heavy FROM loads", -1, &stmt, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } if (sqlite3_step(stmt) == SQLITE_ROW) { std::cout << sqlite3_column_int(stmt, 0) << "\n"; std::cout << sqlite3_column_int(stmt, 1) << "\n"; std::cout << sqlite3_column_int(stmt, 2) << "\n"; std::cout << sqlite3_column_int(stmt, 3) << "\n"; } sqlite3_finalize(stmt); sqlite3_close(db); return 0; }

Запись COUNT(*) не смотрит на NULL в отдельных полях - считаются строки целиком. Для пустой таблицы агрегаты все равно вернут одну строку результата:

#include <iostream> #include <sqlite3.h> int main() { sqlite3* db = nullptr; if (sqlite3_open("stats.db", &db) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } sqlite3_stmt* stmt = nullptr; if (sqlite3_prepare_v2( db, "SELECT COUNT(*) AS cnt FROM loads", -1, &stmt, nullptr ) != SQLITE_OK) { std::cerr << sqlite3_errmsg(db) << "\n"; sqlite3_close(db); return 1; } if (sqlite3_step(stmt) == SQLITE_ROW) { std::cout << sqlite3_column_int(stmt, 0) << "\n"; } sqlite3_finalize(stmt); sqlite3_close(db); return 0; }

Создайте таблицу fees в club.db с полем amount, добавьте четыре суммы и выведите число строк, сумму, минимум и максимум.

Добавьте условие WHERE amount >= ? с порогом 50 и выведите SUM только по подходящим строкам.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить