Сводки COUNT и SUM в Rust
Сводные функции сжимают много строк в
одно значение. COUNT считает
строки или ненулевые ячейки, SUM
складывает числа в столбце.
Узнаем, сколько записей в таблице user:
use rusqlite::Connection;
fn count_users() -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
let total: i64 = conn.query_row(
"SELECT COUNT(*) FROM user",
[],
|row| row.get(0),
)?;
println!("{}", total);
Ok(())
}
fn main() {
match count_users() {
Ok(()) => {}
Err(e) => println!("{}", e),
}
}
На экране одно число. Звездочка внутри
COUNT означает все строки,
подходящие под запрос.
Для суммы нужен числовой столбец. Пример с таблицей очков:
use rusqlite::{Connection, params};
fn sum_points() -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
conn.execute(
"CREATE TABLE IF NOT EXISTS score (
id INTEGER PRIMARY KEY,
points INTEGER NOT NULL
)",
[],
)?;
let total: i64 = conn.query_row(
"SELECT SUM(points) FROM score",
[],
|row| row.get(0),
)?;
println!("{}", total);
Ok(())
}
fn main() {
if let Err(e) = sum_points() {
println!("{}", e);
}
}
Дана таблица:
CREATE TABLE user (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
Выведите число строк в user
через COUNT.
Дана таблица:
1 10
2 20
3 5
Столбцы id и points.
Выведите сумму points через
SUM.
Скажите, сколько строк вернет запрос
с COUNT(* ) без GROUP BY.