oracle的select语句中如何支持字段别名参与运算

[复制链接]
查看11 | 回复7 | 2005-10-30 17:05:33 | 显示全部楼层 |阅读模式
本帖最后由 beanslee 于 2012-1-9 17:18 编辑
在select语句中向使用多个字段的计算的结果作为别名,在select子句中使用,如下sql :
select a as a1,b as b1 ,a+b as c,c/2 as d from test(test表有a,b2个字段)
这样的写法在oracle里面是不能执行的
目前想到的只能是采用下面的方法实现:
select a1,b1,c,c/2 d from (
select a as a1,b b1,a+b as c from test
)

select a a1,b b1,f_sum(a,b) c,f_sum(a,b)/2 d from test--写1函数

with
s1 (select a ,a+b as cfrom test)
select t1.a a1,t1.b b1,s1.c,s1.c/2 as d from test t1,s1
where t1.a=s1.a

第一个sql嵌套了一层,效率应该会受到一定影响吧
第二个sql用函数的话,由于f_sum执行2遍,是否效率也会受到影响呢?
第三个sql的效果在复杂的sql情况下应该最好吧?
不知有没有更好的解决方法

回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
就用你目前提供的第一种方法, 目前,你语句多嵌套了一层, 没有任何效率问题

回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
按照你这样说,嵌套一层的语法应该不存在才对
这是不可避免的啊
再说了,你那例子的c完全可以换成a+b,不就一层了吗,搞那么麻烦
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
select a as a1,b as b1 ,a+b as c,(a+b)/2 as d from test
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
只是举个例子,实际的运算可能会复杂些,也会存在多次引用的问题.....
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
bell6248 发表于 2012-1-9 16:51
就用你目前提供的第一种方法, 目前,你语句多嵌套了一层, 没有任何效率问题

同意,千万别用自定义函数。
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
第一个sql嵌套了一层,效率应该会受到一定影响吧
————————————————
优化器没那么傻,通常来说是不会的
回复

使用道具 举报

千问 | 2005-10-30 17:05:33 | 显示全部楼层
你第一个语句中的C/2 ,应该在执行的时候,是不识别的吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行