SQL分组查询解决实际问题
15 浏览量
更新于2024-09-03
收藏 37KB PDF 举报
"SQL分组查询是数据库操作中常见的需求,用于对数据进行汇总和分类。本示例探讨了两种具体的应用场景。"
在SQL中,分组查询(GROUP BY)是聚合函数(如SUM、COUNT、AVG、MAX、MIN)的好伙伴,它允许我们将数据按照一个或多个字段进行分类,并对每个类别的数据执行聚合操作。在描述的两个情景中,我们分别看到了如何使用GROUP BY来实现不同的查询目标。
情景一:统计每个名字的分数总和
在这个例子中,我们有一个名为`testSum`的表,包含`tname`(名字)和`tscor`(分数)字段。我们需要计算每个名字的分数总和。查询语句如下:
```sql
SELECT tname, SUM(tscor) FROM testSum GROUP BY tname
```
这将返回每个名字及其对应的分数总和。如果还需要筛选出分数总和为30的名字,可以添加HAVING子句:
```sql
SELECT tname, SUM(tscor) FROM testSum GROUP BY tname HAVING SUM(tscor) = 30
```
HAVING子句用于在聚合后过滤结果,与WHERE子句不同的是,WHERE在聚合前过滤行。
情景二:按姓名和科目分组,展示所有分数
在这个场景中,`testScore`表包含`tname`(姓名)、`ttype`(科目)和`tscor`(分数)字段。我们希望以姓名为单位,展示各个科目的分数。这需要多列分组,配合聚合函数,同时用到透视表的概念。在SQL Server中,可以使用PIVOT来实现,但在标准SQL中,可以使用CASE语句或多次JOIN来完成。这里提供一个使用CASE的示例:
```sql
SELECT
tname,
MAX(CASE WHEN ttype = '语文' THEN tscor ELSE NULL END) AS 语文,
MAX(CASE WHEN ttype = '数学' THEN tscor ELSE NULL END) AS 数学,
MAX(CASE WHEN ttype = '英语' THEN tscor ELSE NULL END) AS 英语
FROM testScore
GROUP BY tname
```
这个查询将返回一个表格,其中每行代表一个学生,每个学生的所有科目分数都在同一行显示。
SQL的分组查询是数据处理的关键部分,它能够帮助我们从大量数据中提取有价值的信息。在实际应用中,需要根据具体需求灵活运用GROUP BY、HAVING和聚合函数,有时还需要结合其他高级特性,如PIVOT或CASE语句,以满足复杂的查询需求。
2018-11-03 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2024-04-09 上传
2023-07-27 上传
weixin_38721405
- 粉丝: 2
- 资源: 958
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解