Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpDbGrp 266 of 322 menu
◀ ▶

Группировка строк в SQL

Конструкция GROUP BY собирает строки с одинаковым значением колонки в одну группу. Агрегат считают отдельно для каждой такой группы.

Сумма по коду склада для нескольких партий:

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:grouped.db")) { try (Statement statement = connection.createStatement()) { statement.execute(""" CREATE TABLE IF NOT EXISTS parcels ( id INTEGER PRIMARY KEY, zone TEXT NOT NULL, units INTEGER NOT NULL ) """); statement.executeUpdate( "INSERT INTO parcels (zone, units) VALUES ('A', 3)" ); statement.executeUpdate( "INSERT INTO parcels (zone, units) VALUES ('A', 5)" ); statement.executeUpdate( "INSERT INTO parcels (zone, units) VALUES ('B', 2)" ); ResultSet result = statement.executeQuery( """ SELECT zone, SUM(units) AS total FROM parcels GROUP BY zone ORDER BY zone """ ); while (result.next()) { System.out.println(result.getString("zone")); System.out.println(result.getInt("total")); } } } } } }

В списке SELECT без агрегата могут быть только поля из GROUP BY. Фильтр по итогу группы задают через HAVING, а не WHERE:

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:grouped.db")) { try (Statement statement = connection.createStatement(); ResultSet result = statement.executeQuery(""" SELECT zone, SUM(units) AS total FROM parcels GROUP BY zone HAVING total >= 5 """)) { while (result.next()) { System.out.println(result.getString("zone")); } } } } }

Создайте таблицу pallets в wh.db с полями aisle и boxes, добавьте шесть строк и выведите сумму boxes для каждого aisle.

Оставьте только проходы, где сумма коробок не меньше 10, и выведите их коды.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить