实例演示:
(1)查询表users中的数据。
select u.id,u.realname,U.SEX from users u;
查询结果如下
ID REALNAME SEX
1 10082 松XX
2 10084 林XX 1
3 10087 西XX
4 10100 胡XX
5 10102 龙XX 1
......
(2)上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用CASE语句。
select u.id,u.realname,U.SEX,
( case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
END
) 性别
from users u;
查询结果
ID REALNAME SEX 性别
1 10082 松XX 空的
2 10084 林XX 1 男
3 10087 西XX 空的
4 10100 胡XX 空的
5 10102 龙XX 1 男
......
如果不希望列表中出现"sex"列,语句如下
select u.id,u.realname,
( case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
END
) 性别
from users u;
(3)将sum与case结合使用,可以实现分段统计。
例如现在我希望将上表中各种性别的人数进行统计,sql语句如下
select
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2 then 1 else 0 end) 性别为空
from users u;
执行结果如下
男性 女性 性别为空
1 41 15 0
如果学校内有数千名学生进行了考试,想统计60分以下、60-80分、80-100分的总人数,就可以使用这样的语句来实现。只是条件不同而已。
(4)如果sum、case when结合group by使用,可以进行分组分段统计。
如,我希望统计users表中每个创建者创建的男性、女性、无性别的用户总数(数据表中有一个字段creator_id,表示创建者的ID),语句如下
select u.creator_id 创建者ID,
sum( case u.sex when 1 then 1 else 0 end) 男性,
sum( case u.sex when 2 then 1 else 0 end) 女性,
sum( case when u.sex<>1 and u.sex<>2 then 1 else 0 end) 性别为空
from users u
group by u.creator_id;
查询结果如下
创建者ID 男性 女性 性别为空
1 0 0 0
2 10000 35 12 0
3 11100 0 0 0
4 11060 0 0 0
5 11040 0 0 0
6 11080 2 0 0
7 10281 3 3 0
8 10580 1 0 0
上例中只有一个分组字段,实现了1级统计;如果有多个分组字段,应该可以实现多级统计了。如有居民统计表,保存了人口信息、人口所在市、区、街道信息等,欲统计深圳市的人口数据,实现统计如下统计结果的话,就可以通过多级分组实现。
区划 男性居民 女性居民
深圳市
南山区
粤海
科技
宝安区
新安
(5)case when的语法
CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END
分享到:
相关推荐
在"Oracle的几个Function实例"这个主题中,我们将探讨一些常见的Oracle函数,并通过实际示例来理解它们的用法。 1. ** NVL 函数**: NVL函数用于处理空值(NULL)。如果一个字段的值为NULL,NVL函数会将其替换为你...
### Oracle SQL优化实例详解 #### 一、减少I/O操作 在Oracle数据库中,I/O操作通常是查询执行过程中最耗时的部分之一。因此,减少I/O操作可以显著提高查询性能。 **示例代码:** ```sql SELECT COUNT(CASE WHEN ...
### Oracle中SQL语句行列之间的相互转换 在Oracle数据库中,有时我们需要将表格中的行转换为列或将列转换为行,这种操作被称为行列转换。这种转换对于数据分析、...在实际应用中,应根据具体情况选择合适的转换方法。
### 常用Oracle函数及实例解析 #### 一、引言 在Oracle数据库中,提供了丰富的内置函数来处理各种数据类型的操作需求。这些函数能够极大地简化开发人员的工作,并提高SQL查询的效率。本文将详细介绍几个常用Oracle...
以下是从标题、描述和部分内容中提取的Oracle高级操作函数的知识点。 ### 分支判断函数 #### DECODE函数 DECODE函数是Oracle中的一个条件分支函数,它的功能类似于编程语言中的if-else if-else语句。DECODE函数的...
本文将详细介绍如何通过编写SQL脚本来自动备份Oracle中的存储过程,并结合批处理文件和任务计划程序来实现自动化操作。 #### 二、创建SQL脚本 首先,我们需要创建一个SQL脚本来获取存储过程的定义并将其保存为文本...
CASE WHEN column_name > 10 THEN '大于10' ELSE '小于等于10' END AS "条件判断" FROM table_name; ``` 这段SQL展示了如何在查询中使用日期时间、字符串和逻辑判断函数。 总结,Oracle函数和API是数据库操作的...
在实际应用中,我们可能会遇到调用存储过程的情况。对于Java开发者,可以使用JDBC的CallableStatement来调用Oracle存储过程。以下是三种常见情况的示例: 1. 无返回值的存储过程: ```java CallableStatement cs = ...
Oracle源代码是一个包含大量示例代码的集合,用于帮助学习和理解Oracle数据库系统的工作原理以及如何在实际项目中应用其功能。这些代码片段通常涵盖了Oracle的SQL查询、PL/SQL编程、数据库管理、性能优化等多个方面...
### Oracle存储过程学习经典知识...通过以上内容的学习,我们可以了解到Oracle存储过程的基础概念、基本语法及其在实际开发中的应用技巧。无论是对于初学者还是有一定经验的开发者来说,掌握这些知识点都是非常重要的。
Oracle提供了几个内置的函数来实现这些转换,本篇文章将详细讲解这些函数的用法,并通过实例进行演示。 1. `UPPER()` 函数: `UPPER()` 是Oracle中的一个函数,用于将字符串中的所有字符转换为大写。例如,如果你有...
在SQL Server 2000中,我们可以使用CASE WHEN语句和MAX聚合函数来实现行转列操作。下面是一个示例代码: ```sql select 姓名 as 姓名, max(case 课程 when '语文' then 分数 else 0 end) 语文, max(case 课程 ...
Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它提供了...记得在实践中不断探索,理解和掌握每个命令的用法,同时注意数据库性能优化和事务管理等关键概念,以提升你在Oracle数据库领域的专业能力。
### Oracle触发器详解 在Oracle数据库管理中,触发器是一种非常强大的工具,它允许你在特定的数据库事件(如数据插入、更新或删除)发生时自动执行预...因此,在实际应用中,开发者应谨慎考虑触发器的设计和实施策略。
以下是对Oracle异常用法的详细解释。 首先,异常被分为三大类: 1. 预定义异常:这是Oracle为常见的错误预先定义的异常,如NO_DATA_FOUND、TOO_MANY_ROWS等。当PL/SQL代码遇到这些预定义错误时,系统会自动抛出...
- **条件表达式**:如DECODE(), CASE WHEN THEN ELSE END等,用于实现更复杂的逻辑判断。 **1.8 使用函数产生的总计** - **聚合函数**:如COUNT(), SUM(), AVG()等,用于统计分析。 **1.9 子查询** - **子查询...
- `CASE WHEN THEN` 结构:提供更复杂的条件判断和值映射。 5. **聚合函数**: - `COUNT()`: 计算行数。 - `SUM()`: 求和。 - `AVG()`: 计算平均值。 - `MAX()`, `MIN()`: 找到最大值和最小值。 6. **连接和...
Oracle 异常处理是 PL/SQL 编程中不可...通过这些方法,Oracle 开发者能够有效地管理程序中的错误,确保应用程序在遇到异常时能够优雅地恢复,而不是突然崩溃。异常处理是编写健壮、可靠的 PL/SQL 代码的关键组成部分。
- **性能**:Oracle通常被认为在大规模企业级应用中有较好的表现。 - **安全性**:Oracle提供了强大的安全功能,如细粒度访问控制、数据加密等。 - **易用性**:虽然功能强大,但相比其他数据库,学习曲线可能更陡峭...
#### 四、DECODE函数的应用实例 为了更好地理解`DECODE`函数的使用方法,我们来看一个具体的例子。假设有一个名为`checkup`的表,其中包含`checkup_type`和`blood_test_flag`两个字段,`blood_test_flag`用于标识...