从sql函数重用结果

时间:2014-12-05 20:04:07

标签: sql oracle

看一下这个查询的开头:

SELECT
   sum(decode(REGEXP_COUNT(tpdd.domain, 'thedomain.com'), 1, tpdd.size, 0, 0))  SizeClient,
   sum(decode(REGEXP_COUNT(tpdd.domain, 'thedomain.com'), 1, 0, 0, tpdd.size))  SizeThirdParty,
   ...

有没有办法重复使用" REGEXP_COUNT(tpdd.domain,' thedomain.com')"功能?我希望oracle服务器足够聪明,但我不能保证它,而且,如果没有重复的代码,代码看起来会更好。

1 个答案:

答案 0 :(得分:4)

你可以使用这样的CTE:

 WITH domain_regex as
 (
    SELECT tpdd.domain, REGEXP_COUNT(tpdd.domain,'thedomain.com') as regex_res
    FROM ...
 ) 
 SELECT
    sum(decode(d.regex_res, 1, tpdd.size, 0, 0))  SizeClient,
    sum(decode(d.regex_res, 1, 0, 0, tpdd.size))  SizeThirdParty,
    ...
 JOIN domain_regex d on tpdd.domain = d.domain