Oracle数据库单表查询:总数、百分比与数据连接
需积分: 0 121 浏览量
更新于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 上传
2021-03-03 上传
134 浏览量
2011-03-23 上传
343 浏览量
chenbtravel
- 粉丝: 29
- 资源: 296
最新资源
- 开源通讯录备份系统项目,易于复刻与扩展
- 探索NX二次开发:UF_DRF_ask_id_symbol_geometry函数详解
- Vuex使用教程:详细资料包解析与实践
- 汉印A300蓝牙打印机安卓App开发教程与资源
- kkFileView 4.4.0-beta版:Windows下的解压缩文件预览器
- ChatGPT对战Bard:一场AI的深度测评与比较
- 稳定版MySQL连接Java的驱动包MySQL Connector/J 5.1.38发布
- Zabbix监控系统离线安装包下载指南
- JavaScript Promise代码解析与应用
- 基于JAVA和SQL的离散数学题库管理系统开发与应用
- 竞赛项目申报系统:SpringBoot与Vue.js结合毕业设计
- JAVA+SQL打造离散数学题库管理系统:源代码与文档全览
- C#代码实现装箱与转换的详细解析
- 利用ChatGPT深入了解行业的快速方法论
- C语言链表操作实战解析与代码示例
- 大学生选修选课系统设计与实现:源码及数据库架构