Группировка строк в SQL в Dart
Конструкция GROUP BY собирает строки с одинаковым значением
колонки в одну группу. Агрегат считают отдельно
для каждой такой группы.
Сумма по коду склада для нескольких партий:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('grouped.db');
db.execute('''
CREATE TABLE IF NOT EXISTS parcels (
id INTEGER PRIMARY KEY,
zone TEXT NOT NULL,
units INTEGER NOT NULL
)
''');
db.execute(
"INSERT INTO parcels (zone, units) VALUES ('A', 3)",
);
db.execute(
"INSERT INTO parcels (zone, units) VALUES ('A', 5)",
);
db.execute(
"INSERT INTO parcels (zone, units) VALUES ('B', 2)",
);
var rows = db.select('''
SELECT zone, SUM(units) AS total
FROM parcels
GROUP BY zone
ORDER BY zone
''');
for (var row in rows) {
print(row['zone']);
print(row['total']);
}
db.dispose();
В списке SELECT без агрегата могут быть только
поля из GROUP BY. Фильтр по итогу группы
задают через HAVING, а не WHERE:
import 'package:sqlite3/sqlite3.dart';
var db = sqlite3.open('grouped.db');
var rows = db.select('''
SELECT zone, SUM(units) AS total
FROM parcels
GROUP BY zone
HAVING total >= 5
''');
for (var row in rows) {
print(row['zone']);
}
db.dispose();
Создайте таблицу pallets в wh.db
с полями aisle и boxes, добавьте
шесть строк и выведите сумму boxes для
каждого aisle.
Оставьте только проходы, где сумма коробок не
меньше 10, и выведите их коды.