
SQL GROUP BY
子句:数据分组与汇总
SQL 的
GROUP BY子句用于将数据按照一列或多列的值进行分组,通常与聚合函数(如
SUM、
COUNT、
AVG、
MAX、
MIN)结合使用,对每个分组进行计算。
GROUP BY
语法
<code class="sql">SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;</code>
column1:分组依据列。
aggregate_function(column2):作用于每个分组的聚合函数。
table_name:数据来源表。
GROUP BY
工作原理
-
分组:具有相同
column1值的行被划分到同一组。 聚合:对每个分组应用聚合函数,计算单个结果。
示例表:销售数据
| 产品 (product) | 类别 (category) | 销售额 (sales_amount) | 地区 (region) |
|---|---|---|---|
| 笔记本电脑 (laptop) | 电子产品 (electronics) | 1000 | 北部 (north) |
| 手机 (phone) | 电子产品 (electronics) | 500 | 南部 (south) |
| 电视 (tv) | 电子产品 (electronics) | 700 | 北部 (north) |
| 办公桌 (desk) | 家具 (furniture) | 200 | 东部 (east) |
| 椅子 (chair) | 家具 (furniture) | 150 | 东部 (east) |
GROUP BY
使用示例
1. 按类别分组计算总销售额
<code class="sql">SELECT category, SUM(sales_amount) AS total_sales FROM sales GROUP BY category;</code>
结果:
| 类别 (category) | 总销售额 (total_sales) |
|---|---|
| 电子产品 (electronics) | 2200 |
| 家具 (furniture) | 350 |
2. 统计每个类别的产品数量
<code class="sql">SELECT category, COUNT(product) AS product_count FROM sales GROUP BY category;</code>
结果:
| 类别 (category) | 产品数量 (product_count) |
|---|---|
| 电子产品 (electronics) | 3 |
| 家具 (furniture) | 2 |
3. 按多列分组
<code class="sql">SELECT category, region, SUM(sales_amount) AS regional_sales FROM sales GROUP BY category, region;</code>
结果:
| 类别 (category) | 地区 (region) | 地区销售额 (regional_sales) |
|---|---|---|
| 电子产品 (electronics) | 北部 (north) | 1700 |
| 电子产品 (electronics) | 南部 (south) | 500 |
| 家具 (furniture) | 东部 (east) | 350 |
GROUP BY
与 HAVING
结合使用
HAVING子句用于在分组后过滤分组结果,与
WHERE子句不同,
WHERE子句在分组前过滤行。
示例:过滤销售额大于 500 的类别
<code class="sql">SELECT category, SUM(sales_amount) AS total_sales FROM sales GROUP BY category HAVING SUM(sales_amount) > 500;</code>
结果:
| 类别 (category) | 总销售额 (total_sales) |
|---|---|
| 电子产品 (electronics) | 2200 |
GROUP BY
重要提示
-
执行顺序:分组 -> 聚合 ->
HAVING过滤。
SELECT列:必须出现在
GROUP BY子句中或用作聚合函数的参数。
有效查询:
<code class="sql">SELECT category, MAX(sales_amount) FROM sales GROUP BY category;</code>
无效查询:
<code class="sql">SELECT Product, SUM(Sales_Amount) FROM sales GROUP BY Category; -- 错误:Product 不在 GROUP BY 中,也不是聚合函数的参数</code>
-
多列分组:可以使用多个列进行分组,创建更细致的划分。
NULL 值处理:
NULL值被视为一个单独的分组。
实际应用场景
销售报表:计算每个产品或地区的总销售额。 库存管理:计算每个类别的商品数量。 数据分析:按类别、日期或位置计算平均值或总和。总结
GROUP BY子句是 SQL 中强大的数据汇总工具,能有效地生成有意义的分析结果。 熟练掌握
GROUP BY的用法对于高效的数据库查询至关重要。
作者:Abhay Singh Kathayat
全栈开发人员,精通前后端技术,使用多种编程语言和框架构建高效、可扩展、用户友好的应用程序。
联系邮箱:kaashshorts28@gmail.com
编辑推荐:
- 掌握 SQL GROUP BY:组织和汇总数据02-28
- 掌握 SQL SELECT 语句:综合指南02-28
- 了解 ACID 属性:可靠数据库的支柱02-28
- 了解 SQL 触发器:轻松自动化数据库任务02-28
- MongoDB 与关系数据库:全面比较02-28
- 使用 Flask 和 MySql #ntroduction 进行 CRUD02-28
- 如何使用 Bash 脚本计算所有 MySQL 表中的行数02-28
- py 扩展约定02-28
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 掌握 SQL GROUP BY:组织和汇总数据
掌握 SQL GROUP BY:组织和汇总数据
26-02-28 - 掌握 SQL SELECT 语句:综合指南
掌握 SQL SELECT 语句:综合指南
26-02-28 - 了解 ACID 属性:可靠数据库的支柱
了解 ACID 属性:可靠数据库的支柱
26-02-28 - 了解 SQL 触发器:轻松自动化数据库任务
了解 SQL 触发器:轻松自动化数据库任务
26-02-28 - MongoDB 与关系数据库:全面比较
MongoDB 与关系数据库:全面比较
26-02-28 - 使用 Flask 和 MySql #ntroduction 进行 CRUD
- 如何使用 Bash 脚本计算所有 MySQL 表中的行数
如何使用 Bash 脚本计算所有 MySQL 表中的行数
26-02-28 - py 扩展约定
py 扩展约定
26-02-28 - 通过数据分区提升 MySQL 性能
通过数据分区提升 MySQL 性能
26-02-28 - SQL查询语句是如何执行的
SQL查询语句是如何执行的
26-02-28
