一个简单的SQL优化问题
select count (*) / (extract( minute from (max(b) - min(b))) *60 + extract(second from( max(b) - min (b)))) row_per_second,
extract( minute from (max(b) - min(b))) *60 + extract( second from(max (b) - min(b))) as sec,
count(*) rowCnt,
max(b),
min(b)
from jackTestIO;
如上,意思大概能直接看懂吧.
我的问题是,(extract( minute from (max(b) - min(b))) *60 + extract(second from( max(b) - min (b)))) 这个语句出现了2次,有什么办法把这段表达优化成一个,其他地方直接引用这个值就好了.
要求: 表达明了,语句简洁, 计算高效. 不要用begin,end,declear 什么的,
------解决方案--------------------如果要从日期类型的字段中抽取时/分部分用to_char() 函数就可以.比如to_char(sysdate,'hh24')抽取小时
抽取小时
SQL> select to_char(sysdate,'hh24') from dual;
TO_CHAR(SYSDATE,'HH24')
抽取分钟
SQL> select to_char(sysdate,'mi') from dual;
TO_CHAR(SYSDATE,'MI')
抽取秒
SQL> select to_char(sysdate,'ss') from dual;
TO_CHAR(SYSDATE,'SS')
------解决方案--------------------写个子查询呗
select rowCnt / sec, t.*
from (select extract(minute from(max(b) - min(b))) * 60 +
extract(second from(max(b) - min(b))) as sec,
count(*) rowCnt,
max(b),
min(b)
from jackTestIO) t;