sql语句优化,可以用decode实现吗

angel089 2008-10-06 03:19:09
select 1,
' less than 1 minute' During,
count(*) as Num,
count(*) / 45637 * 100 as Percentage
from al_history
where clear_during < 60
union
select 2,
'1-5 minute' During,
count(*) as Num,
count(*) / 45637 * 100 as Percentage
from al_history
where clear_during >= 60
and clear_during < 300
union
select 3,
'5-10 minute' During,
count(*) as Num,
count(*) / 45637 * 100 as Percentage
from al_history
where clear_during >= 300
and clear_during < 600
union
select 4,
'more than 10 minutes' During,
count(*) as Num,
count(*) / 45637 * 100 as Percentage
from al_history
where clear_during >= 600

...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel089 2008-10-06
  • 打赏
  • 举报
回复
已经实现了,用case实现的,呵呵!谢谢啦
kingofworl 2008-10-06
  • 打赏
  • 举报
回复
你这么写就行 也可以用case when
mantisXF 2008-10-06
  • 打赏
  • 举报
回复
-- TRY IT ...  下次带多点分会更多人帮你:
SELECT SID,
DURING,
COUNT(1) "NUM",
COUNT(1)/4563700 "PERCENTAGE"
FROM (
SELECT (CASE WHEN CLEAR_DURING < 60
THEN 1
WHEN CLEAR_DURING >= 60 AND CLEAR_DURING < 300
THEN 2
WHEN CLEAR_DURING >= 300 AND CLEAR_DURING < 600
THEN 3
WHEN CLEAR_DURING >= 600
THEN 4
ELSE 0
END) "SID",
(CASE WHEN CLEAR_DURING < 60
THEN 'LESS THAN 1 MINUTE'
WHEN CLEAR_DURING >= 60 AND CLEAR_DURING < 300
THEN '1-5 MINUTE'
WHEN CLEAR_DURING >= 300 AND CLEAR_DURING < 600
THEN '5-10 MINUTE'
WHEN CLEAR_DURING >= 600
THEN 'MORE THAN 10 MINUTES'
ELSE 0
END) "DURING"
FROM AL_HISTORY
)TT
GROUP BY SID,DURING;
angel089 2008-10-06
  • 打赏
  • 举报
回复
哎,
mantisXF 2008-10-06
  • 打赏
  • 举报
回复
这个嘛 。。。 嘿嘿!!
angel089 2008-10-06
  • 打赏
  • 举报
回复
该怎么写呢
mantisXF 2008-10-06
  • 打赏
  • 举报
回复
可以。 :)

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧