惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
雷峰网
雷峰网
罗磊的独立博客
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
Cisco Talos Blog
Cisco Talos Blog
Engineering at Meta
Engineering at Meta
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
About on SuperTechFans
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Cloudflare Blog
Know Your Adversary
Know Your Adversary
T
Threat Research - Cisco Blogs
Spread Privacy
Spread Privacy
D
DataBreaches.Net
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
爱范儿
爱范儿
U
Unit 42
Security Latest
Security Latest
M
MIT News - Artificial intelligence
月光博客
月光博客
Scott Helme
Scott Helme
G
Google Developers Blog
有赞技术团队
有赞技术团队
T
Tor Project blog
宝玉的分享
宝玉的分享
Y
Y Combinator Blog
博客园 - Franky
H
Hackread – Cybersecurity News, Data Breaches, AI and More
aimingoo的专栏
aimingoo的专栏
The GitHub Blog
The GitHub Blog
V
V2EX
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
S
Securelist
博客园 - 三生石上(FineUI控件)
Blog — PlanetScale
Blog — PlanetScale
TaoSecurity Blog
TaoSecurity Blog
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
腾讯CDC
D
Docker
Google Online Security Blog
Google Online Security Blog

博客园 - lzhdim

JavaScript 中的原型与继承 1分钟查清局域网所有IP 20260714 - 个人小作品更新 WorkBuddy 完整教程手册 专为AI而生的企业级QLC SSD!长江存储PE501 61.44TB评测:超过1PB的写入测试 32GB显存才是第一生产力!英特尔锐炫 Pro B70评测:中小企业AI降本神器 JavaScript中的this关键字 C#开发的PopoSaver泡泡屏保应用 - 开源研究系列文章 - 个人小作品 6天不间断测试告诉你到底有多省电!米家空调巨省电大1.5匹评测:制冷峰值功率不超过500W 三倍双摄加持 + D-Log 2 曲线!大疆DJI OSMO Pocket 4P全面评测:补齐短板,化身口袋电影机 晶栈4.0闪存立威!长江存储致态TiPro9000 2TB SSD评测:缓外写入超4GB/s独一档 C# 多线程同步机制详解:原理、使用与性能对比 JavaScript作用域与闭包讲解 最受欢迎的 10 大免费 AI 工具 六种AI生意,从月入一万到月入十万 5个国产大模型实测对比2026:DeepSeek、Kimi、豆包、通义、智谱哪个好用 豆包、元宝、千问、Kimi、DeepSeek,这么多AI软件,到底该用哪个? 微软免费开源了一个 Linux 操作系统,没错!是微软出品 一次看懂5种咖啡冲煮方式:意式、手冲、法压、冷萃、摩卡壶到底有什么区别 120个 实用CSS 技巧汇总合集 JavaScript运算符与表达式详解 C#开发的ScreenSaver屏保应用 - 开源研究系列文章 - 个人小作品 WinForm 中跨线程操作 UI 的解决方案 JavaScript变量与数据类型详解 苹果良心!iOS 27适配设备公布:30款机型 7年前的iPhone 11还能升级 C++图形用户界面开发入门 10个不该免费的GitHub神级项目 JavaScript语言全面概述:从历史到现代实践 一张图看懂常见咖啡 C盘空间多出来4GB:谷歌服软 Chrome本地AI大模型可禁用、删除了 96GB显存运行230B大模型!七彩虹灵创K16笔记本评测:160W性能释放 AMD锐龙AI Max+ 395加持全能移动AI工作站 AI PC最强存储搭档!雷克沙NM1090 PRO 8TB固态评测:14400MB/s满速不缩水 C#已经不是当年的C#了——我用它写了个微秒级数据库引擎 EasyTool:轻量全能的 .NET 工具类库 SQL 入门 17:MySQL 数据类型:从字符串到 JSON 的全面解析 SQL 入门 16:SQL 事务隔离级别与死锁解析(易懂) 原相3955XM+TL3228主控!小米电竞鼠标2全面评测:原生双8K究竟有多强 PCIe 4.0火力全开:闪迪奥丁马仕GX 7100 NVMe SSD上手 超乎预料的千元级电竞主板!七彩虹iGame B850M Ultra-OC V14主板评测 SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题 名人 - 我的闪存 C#性能优化技巧 SQL 入门 14:SQL 触发器与事件:自动化数据处理 38个实用的JavaScript 技巧 一款基于 .Net WinForm 开发的节点编辑器,纯 GDI 实现,体积仅 100+Kb Masuit.Tools:这个 C# 工具库 SQL 入门 13:SQL 存储过程与函数:封装逻辑与参数处理 49个 JavaScript 代码快捷技巧,让你在 2026 年成为代码高手 20260503 - 个人小作品更新 SQL 入门 12:SQL 视图:创建、修改与可更新视图 C#如何实现Windows系统桌面截图功能... 6999元AMD新旗舰首测!锐龙9 9950X3D2性能解禁:这颗U根本不是给游戏玩家造的 SQL 入门 11:日期时间格式化、IF、CASE的使用 基于C#的校时类库的实现及使用 - 开源项目研究文章 39g无打孔+原生双8K!雷柏VT0 Air MAX / VT3s Air MAX鼠标评测:轻到飞起还快到极致 WinForm 中控件自适应窗体变化 20260413 - 个人小作品更新 SQL 入门 10:SQL 内置函数:数值、字符串与时间处理 最强麒麟芯+自研风冷 华为Mate80 Pro MAX 风驰版全面评测:涡轮散热封神 性能稳到骨子里 WiFi8核心技术特性与性能分析 2026年最新AMD/Intel桌面CPU排名:多线程、单线程、游戏性能谁才是第一 用DG对C盘进行扩容 - 初学者系列 - 学习者系列 还有比它更强的OEM固态吗!长江存储PC550 1TB评测:不用散热片也能满速的PCIe 5.0 SSD SharpCompress:跨平台的 C# 压缩与解压库 SQL 入门 9:SQL 高级子查询:ANY、EXISTS 与多位置应用 盘点接私活20个最实用的 .NET 开源项目 C#中加载图片的资源释放 20260404 - 个人小作品更新 开启iphone的墙纸玻璃效果 可能是综合性能最强的PCIe 5.0 SSD!铠侠EXCERIA PRO G2 2TB评测:AIDA64线性写入全程不掉速 SQL 入门 8:SQL 复杂查询:子查询与ALL关键词 性能最强的锐龙AI 9 H 465轻薄本!华硕无畏Pro16锐龙版2026评测 4盘RAID 0读写超1100MB/s!希捷酷狼Pro 32TB硬盘评测:百万文件快速完成备份 项目(Project)、项目集(Program)、项目组合(Portfolio)
SQL 入门 7:SQL 聚合与分组:函数、GROUP BY 与 ROLLUP
lzhdim · 2026-03-26 · via 博客园 - lzhdim

以下为 SQL 中聚合函数、分组查询及汇总的用法解析。需要相关数据可私信。

学习内容

  1. 聚合函数
    • COUNT():统计行数,忽略空值;COUNT(*) 计数所有行。
    • SUM():计算总和。
    • AVG():求平均值。
    • MAX():返回最大值。
    • MIN():返回最小值。
    • GROUP_CONCAT():合并多行为字符串。
    • 处理列数据,返回单一结果。
    • 常见函数:
    • 支持表达式(如 SUM(invoice_total * 1.4)),可用于日期。
    • DISTINCT 去除重复值。
  2. GROUP BY 子句
    • 按指定列分组,结合聚合函数计算每组结果。
    • 顺序:SELECT → FROM → WHERE → GROUP BY → ORDER BY。
    • 多列分组用逗号分隔,无需括号。
  3. HAVING 子句
    • 过滤分组后的结果,解决 WHERE 无法处理聚合值的问题。
    • 置于 GROUP BY 后,支持多条件。
  4. WITH ROLLUP
    • 在 GROUP BY 后添加,生成分组汇总行。
    • 多列分组时,逐级汇总至总计。

示例代码与讲解

1. 聚合函数

SELECT MAX(invoice_total)
FROM invoices;

  • 返回 invoice_total 最大值。

SELECT
    MAX(invoice_total) AS highest,
    MIN(invoice_total) AS lowest,
    AVG(invoice_total) AS AVG,
    SUM(invoice_total * 1.4) AS SUM,
    COUNT(invoice_total) AS COUNT
FROM invoices;

  • 多聚合查询,含表达式,重命名结果为五列。

SELECT
    MAX(payment_date) AS highest,
    MIN(payment_date) AS lowest,
    COUNT(payment_date) AS COUNT
FROM invoices;

  • 应用于日期,COUNT 不计空值。

SELECT COUNT(*) AS number_invoices
FROM invoices;

  • 统计所有行,含空值。

SELECT
    MAX(payment_date) AS highest,
    MIN(payment_date) AS lowest,
    COUNT(payment_date) AS COUNT
FROM invoices
WHERE payment_date >= '2018-01-01';

  • 筛选后聚合。

SELECT COUNT(DISTINCT client_id) AS number_client
FROM invoices;

  • 统计唯一 client_id,避免重复计数。

2. GROUP BY

SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
GROUP BY client_id;

  • 按 client_id 分组,计算每组销售总额。

SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
WHERE invoice_date >= '2019-07-01'
GROUP BY client_id
ORDER BY Total_sales DESC;

  • 筛选后分组,按总额降序。

SELECT c.city, c.state, SUM(i.invoice_total) AS Total_sales
FROM invoices i
JOIN clients c USING (client_id)
GROUP BY c.state, c.city;

  • 连接表后,按州和城市分组,逗号分隔条件。

3. HAVING

SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
GROUP BY client_id
HAVING Total_sales >= 800;

  • 筛选销售总额 ≥ 800 的组。

SELECT client_id, SUM(invoice_total) AS Total_sales, COUNT(*) AS number_invoices
FROM invoices
GROUP BY client_id
HAVING Total_sales >= 800 AND number_invoices > 5;

  • 多条件筛选:总额 ≥ 800 且发票数 > 5。

4. WITH ROLLUP

SELECT client_id, SUM(invoice_total) AS Total_sales
FROM invoices
GROUP BY client_id WITH ROLLUP;

  • 添加汇总行,显示所有 client_id 的总计。

SELECT state, city, SUM(invoice_total) AS Total_sales
FROM invoices
JOIN clients c USING (client_id)
GROUP BY state, city WITH ROLLUP;

  • 按州和城市分组,逐级汇总至总计。

作业

1. 聚合与 UNION

SELECT
    'First half of 2019' AS date_range,
    SUM(invoice_total) AS Total_sales,
    SUM(payment_total) AS Total_payments,
    SUM(invoice_total) - SUM(payment_total) AS what_we_expect
FROM invoices
WHERE invoice_date BETWEEN '2019-01-01' AND '2019-06-30'
UNION
SELECT
    'Second half of 2019' AS date_range,
    SUM(invoice_total) AS Total_sales,
    SUM(payment_total) AS Total_payments,
    SUM(invoice_total) - SUM(payment_total) AS what_we_expect
FROM invoices
WHERE invoice_date BETWEEN '2019-07-01' AND '2019-12-31'
UNION
SELECT
    'Total' AS date_range,
    SUM(invoice_total) AS Total_sales,
    SUM(payment_total) AS Total_payments,
    SUM(invoice_total) - SUM(payment_total) AS what_we_expect
FROM invoices
WHERE invoice_date BETWEEN '2019-01-01' AND '2019-12-31';

  • 计算 2019 年上下半年及全年的销售、付款和预期差额。

2. 分组查询

SELECT date, pm.name AS payment_method, SUM(amount) AS Total_payments
FROM payments p
JOIN payment_methods pm ON p.payment_method = pm.payment_method_id
GROUP BY date, pm.name
ORDER BY date;

  • 按日期和支付方式分组,计算付款总额。

3. HAVING 筛选

USE sql_store;
SELECT c.customer_id, SUM(oi.quantity * oi.unit_price) AS total_buy
FROM customers c
JOIN orders o USING (customer_id)
JOIN order_items oi USING (order_id)
WHERE c.state = 'VA'
GROUP BY c.customer_id
HAVING total_buy >= 100;

  • 查询 VA 州客户总购买额,筛选 ≥ 100 的结果。

4. ROLLUP 汇总

USE sql_invoicing;
SELECT pm.name, SUM(p.amount) AS SUM
FROM payments p
JOIN payment_methods pm ON p.payment_method = pm.payment_method_id
GROUP BY pm.name WITH ROLLUP;

  • 按支付方式分组,含总计。

总结

本次解析了聚合函数(COUNT、SUM 等)、GROUP BY 分组、HAVING 过滤及 ROLLUP 汇总。基于 sql_invoicing 和 sql_store 数据库。