跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
SQL分组查询(GROUP BY)
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= SQL分组查询(GROUP BY) = '''SQL分组查询'''是一种强大的数据聚合技术,它允许用户将结果集按一个或多个列分组,并对每个组应用聚合函数(如COUNT、SUM、AVG等)。这是数据分析、报表生成和业务智能中的核心操作。 == 基本语法 == 分组查询的核心是<code>GROUP BY</code>子句,其基本语法如下: <syntaxhighlight lang="sql"> SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1; </syntaxhighlight> == 关键概念 == === 聚合函数 === 常用聚合函数包括: * <code>COUNT()</code> - 计数 * <code>SUM()</code> - 求和 * <code>AVG()</code> - 平均值 * <code>MAX()</code> - 最大值 * <code>MIN()</code> - 最小值 === HAVING子句 === 与WHERE类似,但用于过滤分组后的结果: <syntaxhighlight lang="sql"> SELECT column1, COUNT(column2) FROM table GROUP BY column1 HAVING COUNT(column2) > 5; </syntaxhighlight> == 详细示例 == === 示例1:基本分组 === 假设有'''sales'''表: {| class="wikitable" |+ sales表数据 |- ! sale_id !! product !! category !! amount !! sale_date |- | 1 || Laptop || Electronics || 1200 || 2023-01-15 |- | 2 || Phone || Electronics || 800 || 2023-01-20 |- | 3 || Desk || Furniture || 350 || 2023-02-05 |} 计算每个类别的总销售额: <syntaxhighlight lang="sql"> SELECT category, SUM(amount) as total_sales FROM sales GROUP BY category; </syntaxhighlight> '''输出结果:''' {| class="wikitable" |- ! category !! total_sales |- | Electronics || 2000 |- | Furniture || 350 |} === 示例2:多列分组 === 按类别和月份分组: <syntaxhighlight lang="sql"> SELECT category, EXTRACT(MONTH FROM sale_date) as month, SUM(amount) as monthly_sales FROM sales GROUP BY category, EXTRACT(MONTH FROM sale_date); </syntaxhighlight> == 高级用法 == === 分组集(GROUPING SETS) === 允许在单个查询中指定多个分组: <syntaxhighlight lang="sql"> SELECT category, product, SUM(amount) FROM sales GROUP BY GROUPING SETS ( (category, product), (category), () ); </syntaxhighlight> === ROLLUP与CUBE === * <code>ROLLUP</code>生成层次化的小计 * <code>CUBE</code>生成所有可能组合的小计 <mermaid> flowchart TD A[原始数据] --> B[GROUP BY] B --> C[按category分组] B --> D[按product分组] B --> E[不分组] </mermaid> == 实际应用场景 == === 场景1:电商销售分析 === 分析各产品类别的月销售额趋势,识别畅销品类。 === 场景2:用户行为分析 === 统计不同用户群体的活动频率,用于用户分群。 == 性能考虑 == * 为GROUP BY列创建索引 * 避免在大表上使用复杂分组 * 考虑使用物化视图存储预聚合结果 == 常见错误 == 1. 在SELECT中包含非聚合列但未在GROUP BY中列出 <syntaxhighlight lang="sql"> -- 错误示例 SELECT product, category, SUM(amount) FROM sales GROUP BY category; </syntaxhighlight> 2. 混淆WHERE和HAVING的使用时机 == 数学基础 == 分组操作本质上是将关系<math>R</math>划分成等价类: <math>G = \{ [x] | x \in R \}</math> 其中<math>[x] = \{ y | y \in R, y \sim x \}</math> == 练习 == 尝试编写查询: 1. 计算每个月的销售总额 2. 找出销售额超过1000的产品类别 3. 计算每个类别中产品的平均售价 == 总结 == GROUP BY是SQL中最强大的数据分析工具之一,掌握它能显著提升数据处理能力。从简单分组到高级OLAP操作,理解这一概念对任何使用数据库的人员都至关重要。 [[Category:计算机科学]] [[Category:数据库与信息系统]] [[Category:SQL基础]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)