Сортировка и предел в Rust
Сортировка через ORDER BY задает
порядок строк в результате: по возрастанию
или по убыванию значения столбца. Предел
LIMIT
обрезает ответ после сортировки, оставляя
только первые несколько записей.
Выведем имена по алфавиту:
use rusqlite::Connection;
fn sorted_names() -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
let mut stmt = conn.prepare("SELECT name FROM user ORDER BY name ASC")?;
let rows = stmt.query_map([], |row| row.get::<_, String>(0))?;
for name in rows {
println!("{}", name?);
}
Ok(())
}
fn main() {
match sorted_names() {
Ok(()) => {}
Err(e) => println!("{}", e),
}
}
Строки идут от меньшего имени к большему
в лексикографическом порядке. Для ключей
часто берут ORDER BY id.
Возьмем только две первые строки после сортировки по ключу:
use rusqlite::Connection;
fn top_two() -> Result<(), rusqlite::Error> {
let conn = Connection::open("app.db")?;
let mut stmt = conn.prepare(
"SELECT id, name FROM user ORDER BY id ASC LIMIT 2",
)?;
let rows = stmt.query_map([], |row| {
let id: i64 = row.get(0)?;
let name: String = row.get(1)?;
Ok((id, name))
})?;
for item in rows {
let (id, name) = item?;
println!("{} {}", id, name);
}
Ok(())
}
fn main() {
if let Err(e) = top_two() {
println!("{}", e);
}
}
Дана таблица:
3 cara
1 ann
2 bob
Выведите имена в порядке возрастания
id.
Дана таблица user с несколькими
строками. Выведите одно имя с наибольшим
id через сортировку по убыванию
и предел 1.
Скажите, в каком порядке применяются сортировка и предел в одном запросе.