如果要在Oracle数据库的select子句中实现字段值的大小比较,可以使用case end和decode函数实现。
例如,查询出某个表的3个小时以上的处理统计数据,2个小时以内的处理统计数据,1个小时以内的处理统计数据的SQL语句。
使用case end函数可以实现如下:
select t.custommgrid,
count(case
when (t.createtime - t.firstdealtime) >= 3 / 24 then
t.dealflag
else
null
end) as threehour_things,
count(case
when (t.createtime - t.firstdealtime) < 2 / 24 then
t.dealflag
else
null
end) as twohour_things,
count(case
when (t.createtime - t.firstdealtime) < 1 / 24 then
t.dealflag
else
null
end) as onehour_things,
count(t.dealflag) as all_things
from tb_name t
where t.dealflag = 1
group by t.custommgrid;
使用decode函数可以实现如下:
select count(decode(sign((t.createtime - t.firstdealtime) - 3 / 24),
-1,
null,
t.dealflag)) as threehour_things,
count(decode(sign((t.createtime - t.firstdealtime) - 2 / 24),
-1,
t.dealflag,
null)) as twohour_things,
count(decode(sign((t.createtime - t.firstdealtime) - 1 / 24),
-1,
t.dealflag,
null)) as onehour_things,
count(t.dealflag) as all_things
from tb_name t
where t.dealflag = 1
group by t.custommgrid;
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
该函数的实现逻辑是这样:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2) ......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1716817
)
使用case end可以直接得出比较值,大小一清二楚;而使用decode要使用sign可以一次转换,增加了一弯来绕。这是因为decode函数只能做等值比较。
因此,对于此类需求,最好还是使用case end来实现。
分享到:
相关推荐
数据库技术与应用 使用Select子句设定查询目标列学习任务书1.doc 学习资料 复习资料 教学资源
LINQ的经典例子-Where,Select、SelectMany、SkipWhile子句中使用数组索引.
(3) SELECT子句中避免使用 ‘ * ‘: (4) 减少访问数据库的次数: (5) 在SQL*Plus , SQL*Forms和Pro*C中重新设置ARRAYSIZE参数, 可以增加每次数据库访问的检索数据量 ,建议值为200 (6) 使用DECODE函数来减少...
数据库技术与应用 Select子句的参数-1学习任务书.doc 学习资料 复习资料 教学资源
数据库技术与应用 Select子句的参数-1习题与作业.doc 学习资料 复习资料 教学资源
数据库技术与应用 Select子句的参数-2学习任务书.doc 学习资料 复习资料 教学资源
数据库技术与应用 Select子句的参数-2习题与作业.doc 学习资料 复习资料 教学资源
sql中select语句中的distinct的用法
(3)SELECT子句中避免使用‘*’: Oracle在解析的过程中, 会将‘*’依次转换成任何的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。 (4)减少访问数据库的次数: Oracle在内部执行...
Oracle使用技巧之case子句的用途.docx
在SQL中有两种函数一种是单行函数,一种是多行函数....这些函数都可以被用于select、where和oder by等子句中.下面我们就来分析单行函数,在这里我列举了oracle中一些常用的单行函数进行操作.希望你所有收获:
SQL Server字符串处理函数大全 select 字段1 from 表1 where 字段1.IndexOf("云")=1; 这条语句不对的原因是indexof()函数不是sql函数,...可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用字符串函数。
SELECT语句高级用法1,使用group by 子句group by 子句将表分为几组,此子句通常与为每个这样的组生产总结值的聚集函数组合。使用不带聚集的group by 子句与在select 子句中使用的distinct(或unique)关键字很相 ...
MYSQL函数和操作符 操作符 . 操作符优先级 ..... 比较函数和操作符 ....控制流程函数 ... 与GROUP BY子句同时使用的函数和修改程序 . GROUP BY(聚合)函数 . GROUP BY修改程序 . 具有隐含字段的GROUP BY
(3) SELECT子句中避免使用 ‘ * ‘: ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 (4) 减少访问数据库的次数: ORACLE在内部执行了许多...
GROUP BY子句要和聚合函数配合使用才能完成分组查询,在SELECT查询的字段中,如果没有使用聚合函数就必须出现在ORDER BY子句中。分组查询后,查询结果为一个或多个列分组后的结果集。 GROUP BY语法 SELECT 列名, ...
sql优化技巧 1.用WHERE子句替换HAVING子句 12 2.使用DECODE函数来减少处理时间 12 3.用>=替代> 13 4.使用表的别名(ALIAS) 13 等等
1. 在 studentsdb 数据库中使用 SELECT 语句进行基本查询。 (1)在 student_info 表中,查询每个学生的学号、姓名、出生日期信息。 (2)查询 student_info 表学号为 0002 的学生的姓名和家庭住址。 (3)查询 ...
使用分组,排序和聚合函数以及连接查询 1.掌握通配符的用法 2.掌握 GROUP BY 子句的使用 3.掌握 ORDER BY子句的使用 4.掌握 DISTINCT关键字的使用 5.掌握聚集函数的使用