在http://www.itpub.net/thread-1834035-1-1.html看到一个使用sign分组的用法,个人觉得不错,记录下:
问题:
想知道满足下面条件的
sale > 2000 and age > 22,
sale > 2000 and age < 22,
sale < 2000 and age > 22,
sale < 2000 and age < 22
数量及sale总和:
普通写法:使用四个union all,具体的自己写,类似下面sql:
with tmp_t as( select 1 as v_id,3000 as sale,22 as age from dual union all select 2,2100,23 from dual union all select 3,2300,21 from dual union all select 4,1000,19 from dual union all select 5,1000,23 from dual union all select 6,2600,25 from dual union all select 7,2200,18 from dual union all select 8,1500,20 from dual union all select 9,1600,35 from dual union all select 10,2000,22 from dual union all select 11,2000,21 from dual ) select sum(case when sale<2000 and age<22 then 1 else 0 end) as 小于2000且age小于22, sum(case when sale<2000 and age<22 then sale else 0 end) as sale总和, sum(case when sale<2000 and age>22 then 1 else 0 end) as 小于2000且age大于22, sum(case when sale<2000 and age>22 then sale else 0 end) as sale总和, sum(case when sale>2000 and age<22 then 1 else 0 end) as 大于2000且age小于22, sum(case when sale>2000 and age<22 then sale else 0 end) as sale总和, sum(case when sale>2000 and age>22 then 1 else 0 end) as 大于2000且age大于22, sum(case when sale>2000 and age>22 then sale else 0 end) as sale总和 from tmp_t
结果如下:
使用sign函数sql如下:
with tmp_t as( select 1 as v_id,3000 as sale,22 as age from dual union all select 2,2100,23 from dual union all select 3,2300,21 from dual union all select 4,1000,19 from dual union all select 5,1000,23 from dual union all select 6,2600,25 from dual union all select 7,2200,18 from dual union all select 8,1500,20 from dual union all select 9,1600,35 from dual union all select 10,2000,22 from dual union all select 11,2000,21 from dual ) select decode(sign(sale-2000),1,'大于2000',-1,'小于2000'),decode(sign(age-22),1,'大于22',-1,'小于22'),count(1),sum(sale) from tmp_t group by sign(sale-2000),sign(age-22) having sign(sale-2000)*sign(age-22)<>0 order by sign(sale-2000),sign(age-22)
结果如下:
全文完。
相关推荐
Oracle数据库使用分组函数来对数据进行聚集
因此,我们可以使用 Oracle 提供的方法来创建一个同名的函数 DATEADD,以便于移植使用。 DATEADD 函数的实现 ------------------ DATEADD 函数的实现主要是通过使用 PL/SQL 语言来编写一个存储过程。函数的输入...
使用Oracle的SQL函数实现工作日和节假日分组统计 本文介绍了使用Oracle的SQL函数来实现工作日和节假日的分组统计,通过对工作日和节假日的判断和统计,可以更好地合理调度人力物力资源,制定节假日劳务补贴政策。...
oracle笔记分组函数,涉及组函数案例,在使用组函数的过程中注意事项,有具体的案例说明!
### ORACLE CRC32函数详解 #### 一、概述 在Oracle数据库中,`CRC32`函数是一种非常实用的功能,主要用于将字符类型的数据转换为一个唯一的数字类型,这一过程通常被称为散列(Hash)。通过该函数,可以方便地生成...
在Oracle数据库中,函数和分组是进行数据处理和分析的重要工具。本篇将详细介绍一些常用的Oracle内建函数,特别是字符函数、数字函数以及分组相关的GROUP BY子句和HAVING子句。 首先,我们来看字符函数。字符函数...
通过`Oracle字符相似度函数.png`这个图片文件,你可能能够更直观地了解这些函数的使用方法和示例,结合实际案例学习将更有助于理解和掌握这些功能。在实践中,不断试验和调整,才能更好地利用这些工具解决实际问题。
Oracle数据库系统中内置了MD5函数,这是一种广泛使用的哈希函数,用于生成固定长度的数字摘要,通常用于数据完整性校验和密码存储。MD5全称为Message-Digest Algorithm 5,由Ron Rivest在1991年设计,尽管它在安全性...
本篇文章将详细阐述Oracle分组函数的概念、功能以及常用分组函数的使用方法。 一、分组函数概述 分组函数主要作用于一组数据上,而不是单个记录,它们用于对数据进行汇总,如计算总和、平均值、最大值、最小值等。...
简单的oracle 时间比较函数,自己在网上找到并加以整理出来。
ORACLE的OVER函数使用技巧ORACLE的OVER函数使用技巧ORACLE的OVER函数使用技巧
- Oracle中同样使用`SIGN()`函数。 14. **求圆周率** - SQLServer中使用`PI()`函数。 - Oracle中没有直接的`PI()`函数,但可以通过`ACOS(-1)`计算出π的值。 15. **三角函数(Sin, Cos, Tan)** - 两个系统均...
例如,可以使用 Rollup 函数对数据进行分组和汇总,使用 Rank 函数对数据进行排名,使用 Lag 和 Lead 函数对数据进行延迟和前导操作,使用 Sum 和 Avg 函数对数据进行汇总和平均计算,使用 Ratio_to_Report 函数对...
oracle之占比函数 oracle之占比函数 oracle之占比函数
开窗函数允许我们在查询结果集的一个窗口内执行聚合操作,而无需对数据进行物理排序或分组。本文将重点介绍`OVER`函数及其相关用法,并通过具体的例子来帮助读者更好地理解和掌握这些技巧。 #### 二、`OVER`函数...
Oracle LISTAGG 函数的使用 Oracle LISTAGG 函数是 Oracle 11.2 中引入的一种新特性,主要功能类似于 wmsys.wm_concat 函数,即将数据分组后,把指定列的数据再通过指定符号合并。LISTAGG 函数有两个参数:要合并的...
Oracle 自定义聚合函数-分析函数 Oracle 自定义聚合函数是一种强大且灵活的功能,允许用户根据自己的需求创建自定义的聚合函数。聚合函数是一种特殊的函数,它可以对一组数据进行处理和计算,并返回一个结果。 ...
分析函数(Analytic Functions)是Oracle SQL中的高级特性,它们在数据集上执行计算,并返回基于分组或排序的数据结果。与聚合函数(如SUM, AVG, COUNT等)不同,分析函数可以在每个行级别上返回结果,而不只是返回...
同时,这个函数也可以与其他 Oracle 函数和操作符结合使用,以实现更加复杂的数据处理任务。 在实际应用中,Oracle 中实现 Split 函数功能可以用于各种数据处理场景,例如数据清洁、数据转换和数据分析等。例如,在...
Oracle数据库系统提供了丰富的内置函数,这些函数用于处理各种数据类型,包括字符串、数值以及日期等。以下是关于Oracle函数的一些...了解并熟练使用这些函数,能极大地提高在Oracle数据库中的数据操作效率和查询性能。