JQuick-SQL GROUP BY 聚合:COUNT、SUM、AVG、MIN 与 MAX

JQuick-SQL GROUP BY 聚合:COUNT、SUM、AVG、MIN 与 MAX

Meta 描述:使用 jquick-sql 的 GROUP BY 和 COUNT、SUM、AVG、MIN、MAX 汇总注册数据集,学习分组列、聚合别名和 Java 嵌入式执行案例。

标签:jquick-sql、GROUP BY、SQL 聚合、COUNT、SUM、AVG、轻量级 SQL 引擎、Java 跨库查询

官网示例:

前言

GROUP BY 将明细行分为业务分组,聚合函数则计算每组的计数、求和、均值或极值。jquick-sql 作为 Java 分布式 SQL 查询引擎,可在进程内对应用已注册的数据集执行这些语义;外部数据连接与抽取仍应由上游负责。

分组列与聚合函数

项目支持 COUNT、SUM、AVG、MIN、MAX。SELECT 中的非聚合字段应进入 GROUP BY,并为聚合结果设置容易识别的别名:

sql 复制代码
SELECT status,
       COUNT(*) AS user_count,
       AVG(age) AS avg_age,
       MIN(age) AS min_age,
       MAX(age) AS max_age
FROM users
GROUP BY status

聚合运算建立在注册时声明的 Java 类型之上;金额、数量等字段应使用合适的数值类型。

汇总后排序与过滤

聚合结果可继续 ORDER BY,并可用 HAVING 过滤分组:

sql 复制代码
SELECT status, COUNT(age) AS count, AVG(age) AS avg_age
FROM users
GROUP BY status
HAVING COUNT(age) > 1
ORDER BY count DESC

WHERE 和 HAVING 的职责不同:WHERE 过滤分组前明细,HAVING 过滤聚合后分组。

面向异构数据的聚合边界

异构数据源联邦查询需要先把来自文件、接口或其他存储的数据转换成统一的 JQuickColumnMeta 和 JQuickRow。jquick-sql 不会以 JDBC 直连方式拉取这些数据,但可以对已注册数据集提供统一的聚合 SQL。

可执行 Java 案例

java 复制代码
import com.github.paohaijiao.engine.JQuickSQL;
import com.github.paohaijiao.statement.JQuickColumnMeta;
import com.github.paohaijiao.statement.JQuickDataSet;
import com.github.paohaijiao.statement.JQuickRow;
import java.util.Arrays;

public class GroupByAggregationDemo {
    public static void main(String[] args) {
        JQuickSQL sql = JQuickSQL.embedded();
        try {
            sql.registerTable("sales", Arrays.asList(
                new JQuickColumnMeta("city", String.class, "sales"),
                new JQuickColumnMeta("amount", Double.class, "sales")
            ), Arrays.asList(
                row("city", "Beijing", "amount", 1200.0),
                row("city", "Beijing", "amount", 800.0),
                row("city", "Shanghai", "amount", 1500.0)
            ));
            JQuickDataSet result = sql.execute(
                "SELECT city, COUNT(*) AS order_count, SUM(amount) AS total_amount, AVG(amount) AS avg_amount " +
                "FROM sales GROUP BY city ORDER BY total_amount DESC"
            );
            result.printTable();
        } finally {
            sql.shutdown();
        }
    }
    private static JQuickRow row(Object... kv) {
        JQuickRow r = new JQuickRow();
        for (int i = 0; i < kv.length; i += 2) r.put((String) kv[i], kv[i + 1]);
        return r;
    }
}

常见问题

**COUNT(*) 与 COUNT(age) 如何选择?**前者计数分组行,后者以指定列参与计数,按业务含义选择。

**为什么金额用 Double.class?**示例遵循项目测试类型;真实金额精度策略应由业务模型统一。

**聚合前能先筛选吗?**可以,在 GROUP BY 前使用 WHERE。

总结与拓展

GROUP BY 把注册数据集压缩为可解释的业务指标,是离线统计、服务内分析和 Java 跨库查询结果汇总的重要能力。将类型和字段语义在接入阶段统一,可显著提升汇总稳定性。

Core Advantage

Built-in aggregation turns registered rows into concise group-level metrics.

Applicable Scenarios

Operational dashboards, status statistics, local rollups, and connector-normalized analytics.

相关推荐
小冯不疯1 小时前
销售订单同步实战:从聚水潭到金蝶云星空的线上出库单落地
大数据·数据库
qq_401700411 小时前
Qt 实时大数据量存储:自己动手实现 TDMS 读写
数据库·qt
Leon-Ning Liu1 小时前
Oracle参数对比脚本分享:对比 SPFILE 参数与内存参数差异,支持 11g 到 19c
数据库·oracle
涛思数据(TDengine)2 小时前
TDengine TSDB 3.4.3.3 上线:流计算分层闭环、虚拟表跨层引用,查询关联一次写完
数据库·人工智能·数据分析·时序数据库·tdengine·工业
远方16092 小时前
118-五大进程LGWR DBWn CKPT SMON PMON 与存储故障-文件系统对照
大数据·数据库·sql·oracle·database
ss2732 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 17 PostgreSQL SQL高级查询:窗口函数、CASE、COALESCE
数据库·笔记·postgresql
远方16092 小时前
119-Oracle CDB 下修改和重置 SYS SYSTEM密码记录
大数据·数据库·sql·oracle·database
橙光成长2 小时前
Context Mode 深度解析:用沙盒、SQLite 与钩子路由,把 AI 编码 Agent 的上下文消耗削减 98%
数据库·人工智能·sqlite
数据库小学妹2 小时前
MySQL时区问题排查:TIMESTAMP和DATETIME的区别与跨时区对账踩坑
数据库·mysql·datetime·时区·timestamp·跨时区对账