Ограничение числа строк в выборке
Ключевое слово LIMIT обрезает набор после
сортировки.
Его часто сочетают с ORDER BY, чтобы получить
верхние или нижние значения. Первые две строки
после сортировки по возрастанию:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("top_rows.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 laps ("
"id INTEGER PRIMARY KEY,"
"ms 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 laps (ms) VALUES (120)",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
if (sqlite3_exec(
db,
"INSERT INTO laps (ms) VALUES (95)",
nullptr,
nullptr,
&err
) != SQLITE_OK) {
std::cerr << err << "\n";
sqlite3_free(err);
sqlite3_close(db);
return 1;
}
if (sqlite3_exec(
db,
"INSERT INTO laps (ms) VALUES (110)",
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 ms FROM laps ORDER BY ms ASC LIMIT 2",
-1,
&stmt,
nullptr
) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
std::cout << sqlite3_column_int(stmt, 0) << "\n";
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
Число в LIMIT можно передать параметром
через sqlite3_bind_int, если размер страницы
приходит из программы:
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* db = nullptr;
if (sqlite3_open("top_rows.db", &db) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
sqlite3_stmt* query = nullptr;
if (sqlite3_prepare_v2(
db,
"SELECT ms FROM laps ORDER BY ms DESC LIMIT ?",
-1,
&query,
nullptr
) != SQLITE_OK) {
std::cerr << sqlite3_errmsg(db) << "\n";
sqlite3_close(db);
return 1;
}
sqlite3_bind_int(query, 1, 1);
if (sqlite3_step(query) == SQLITE_ROW) {
std::cout << sqlite3_column_int(query, 0) << "\n";
}
sqlite3_finalize(query);
sqlite3_close(db);
return 0;
}
Создайте таблицу sales в market.db
с полем amount, добавьте пять сумм и
выведите три наибольших.
Выведите одну минимальную сумму, используя
сортировку по возрастанию и LIMIT 1.