Сводные функции SQL в SQLite в Dart
Агрегаты сжимают множество строк в одно значение.
COUNT считает строки, SUM складывает
числа, MIN и MAX берут крайние
значения столбца.
Несколько функций можно запросить в одном SELECT
с псевдонимами для чтения из строки результата:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('stats.db');
db.execute('''
CREATE TABLE IF NOT EXISTS loads (
id INTEGER PRIMARY KEY,
kg INTEGER NOT NULL
)
''');
db.execute('INSERT INTO loads (kg) VALUES (10)');
db.execute('INSERT INTO loads (kg) VALUES (25)');
db.execute('INSERT INTO loads (kg) VALUES (15)');
var rows = db.select('''
SELECT
COUNT(*) AS cnt,
SUM(kg) AS total,
MIN(kg) AS light,
MAX(kg) AS heavy
FROM loads
''');
if (rows.isNotEmpty) {
var row = rows.first;
print(row['cnt']);
print(row['total']);
print(row['light']);
print(row['heavy']);
}
db.dispose();
Запись COUNT(*) не смотрит на NULL в отдельных
полях - считаются строки целиком. Для пустой таблицы
агрегаты все равно вернут одну строку результата:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('stats.db');
var rows = db.select('SELECT COUNT(*) AS cnt FROM loads');
if (rows.isNotEmpty) {
print(rows.first['cnt']);
}
db.dispose();
Создайте таблицу fees в club.db
с полем amount, добавьте четыре суммы
и выведите число строк, сумму, минимум и максимум.
Добавьте условие WHERE amount >= ? с
порогом 50 и выведите SUM
только по подходящим строкам.