Oracle数据库单表查询:总数、百分比与数据连接
需积分: 0 32 浏览量
更新于2024-08-05
收藏 839KB PDF 举报
"本文主要介绍了在Oracle数据库中进行单表查询总数、百分比以及数据的横向纵向连接。文章首先提出了一个常见的教师信息表TEST_TEACHER,包含字段id、name、dw_name、sex和degree,然后逐步解答了如何统计表中的各种信息。"
1. 统计单表字段总数及百分比
在Oracle中,统计某个字段的总数可以使用COUNT()函数,例如,要计算TEST_TEACHER表中不同单位(dw_name)的数量,可以执行以下SQL语句:
```sql
SELECT dw_name, COUNT(dw_name) AS 人数
FROM TEST_TEACHER
GROUP BY dw_name
ORDER BY dw_name;
```
如果要计算各学历(degree)或性别的比例,可以在子查询中计算总数,然后除以总人数。例如,计算男性(sex='男')教师的比例:
```sql
SELECT COUNT(CASE WHEN sex = '男' THEN 1 END) * 100 / (SELECT COUNT(*) FROM TEST_TEACHER) AS 男性比例
FROM TEST_TEACHER;
```
2. 数据的横向连接
横向连接,即合并列,通常通过SQL的CROSS JOIN或使用逗号(,)实现。例如,如果你有两个表TEST_TEACHER和DEGREES,分别表示教师和学历,想要将它们的学历信息横向连接,可以这样做:
```sql
SELECT t.id, t.name, d.degree
FROM TEST_TEACHER t, DEGREES d;
```
或者使用CROSS JOIN:
```sql
SELECT t.id, t.name, d.degree
FROM TEST_TEACHER t
CROSS JOIN DEGREES d;
```
3. 数据的纵向连接
纵向连接,即合并行,通常使用UNION或UNION ALL操作。例如,要将男性和女性教师的学历信息分别列出,可以这样写:
```sql
(SELECT id, name, degree
FROM TEST_TEACHER
WHERE sex = '男')
UNION ALL
(SELECT id, name, degree
FROM TEST_TEACHER
WHERE sex = '女');
```
4. 防止分母为0和保留小数位数
在计算比例时,为了避免分母为0导致错误,可以使用DECODE函数。例如,当计算单位的教师比例时:
```sql
SELECT dw_name, COUNT(dw_name) * 100 / DECODE(SUM(COUNT(*)), 0, 1, SUM(COUNT(*))) AS 比例
FROM TEST_TEACHER
GROUP BY dw_name
ORDER BY dw_name;
```
这里,DECODE函数确保当总人数为0时,比例为1。同时,TRUNC函数用于保留小数位数,如TRUNC(value, decimal_places),可以控制保留的小数位数。
5. 使用CASE WHEN THEN进行条件统计
CASE WHEN THEN语句可以用来根据特定条件进行计数,例如统计性别和学历:
```sql
SELECT dw_name, sex, degree,
COUNT(CASE WHEN sex = '男' THEN 1 END) AS 男性人数,
COUNT(CASE WHEN degree = '博士' THEN 1 END) AS 博士人数
FROM TEST_TEACHER
GROUP BY dw_name, sex, degree
ORDER BY dw_name, sex, degree;
```
这个查询将返回每个单位、性别和学历的组合及其对应的人数。
通过这些方法,我们可以有效地从Oracle数据库中的单表中获取统计信息,并进行复杂的数据分析。了解并熟练运用这些SQL技巧对于数据库管理和数据分析至关重要。
2021-06-12 上传
2024-03-14 上传
134 浏览量
2011-03-23 上传
343 浏览量
chenbtravel
- 粉丝: 29
- 资源: 296
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍