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.

相关推荐
Decay__12 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
笃行35013 小时前
AI数据库的库内四层结构,KingbaseES 产品拆解
数据库
我是大猴子15 小时前
redis
数据库·redis·缓存
苏宸啊17 小时前
MySQL(一)
数据库·mysql
2603_9696948517 小时前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
这个DBA有点耶18 小时前
库内语义构建 vs 外挂向量库:业务语义缺失,才是RAG“胡说八道”的根源
数据库·mysql·aigc
kobe_OKOK_19 小时前
mysql 开启 binlog 日志
数据库·mysql
鸽芷咕19 小时前
KingbaseES 调参先看执行计划,参数是答案不是起点
数据库
这个DBA有点耶20 小时前
MySQL 8.0直方图:统计信息升级了,执行计划为什么还是选错?
数据库·mysql·代码规范
老纪的技术唠嗑局1 天前
把 seekdb 塞进 iOS App:让混合检索嵌入手机
数据库