Сводные функции SQL в SQLite
Агрегаты сжимают множество строк в одно значение.
COUNT считает строки, SUM складывает
числа, MIN и MAX берут крайние
значения столбца.
Несколько функций можно запросить в одном SELECT
с псевдонимами для чтения из ResultSet:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:stats.db")) {
try (Statement statement = connection.createStatement()) {
statement.execute("""
CREATE TABLE IF NOT EXISTS loads (
id INTEGER PRIMARY KEY,
kg INTEGER NOT NULL
)
""");
statement.executeUpdate(
"INSERT INTO loads (kg) VALUES (10)"
);
statement.executeUpdate(
"INSERT INTO loads (kg) VALUES (25)"
);
statement.executeUpdate(
"INSERT INTO loads (kg) VALUES (15)"
);
ResultSet result = statement.executeQuery(
"""
SELECT
COUNT(*) AS cnt,
SUM(kg) AS total,
MIN(kg) AS light,
MAX(kg) AS heavy
FROM loads
"""
);
if (result.next()) {
System.out.println(result.getInt("cnt"));
System.out.println(result.getInt("total"));
System.out.println(result.getInt("light"));
System.out.println(result.getInt("heavy"));
}
}
}
}
}
}
Запись COUNT(*) не смотрит на NULL в отдельных
полях - считаются строки целиком. Для пустой таблицы
агрегаты всё равно вернут одну строку результата:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Main {
public static void main(String[] args) throws Exception {
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:stats.db")) {
try (Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(
"SELECT COUNT(*) AS cnt FROM loads",
)) {
if (result.next()) {
System.out.println(result.getInt("cnt"));
}
}
}
}
}
Создайте таблицу fees в club.db
с полем amount, добавьте четыре суммы
и выведите число строк, сумму, минимум и максимум.
Добавьте условие WHERE amount >= ? с
порогом 50 и выведите SUM
только по подходящим строкам.