如何将选定的值分配给变量,以便我可以在嵌套的sql中重用该值?例如,我可能有这样的东西:
select count(user_id), substr(name, 0, 5)
from users
group by substr(name, 5);
但在这种情况下,select子句中的substr
值可能与group by子句中的substr
值不一致。如果我可以将substr
值中的一个赋值给变量并重用它,那将会很好。这将确保值一致。我怎样才能在Oracle中实现这一目标?
答案 0 :(得分:2)
如果你想分配变量,你需要切换到PL / SQL,因为你说你试图避免这种情况,那么常规查询中没有变量,除非你想要涉及服务器端代码。
如果您希望将结果作为列处理,则可以执行以下操作:
select count(t.user_id),t.name
from(
select user_id,substr(name,0,5) name
from users
) t
group by t.name
答案 1 :(得分:1)
为避免选择列表和group by
子句中的术语重复,您可以使用子查询:
select count(user_id), name_alias
from (
select user_id, substr(name, 0, 5) as name_alias
from users
)
group by name_alias;
在这个简单的例子中似乎有些过分,但它可以用于复杂的case语句等,它可以节省一些保持代码一致的工作;虽然如果你犯了错误,甲骨文会抱怨。
因为Oracle doesn't allow you to use column aliases in the same level of query, except in the order by
需要子查询,因为查询是如何在内部构建的。
答案 2 :(得分:1)
尝试使用别名;其他操作(如调用子查询)操作成本高昂
在oracle中,
select count(a.user_id), a.name from (
select user_id, substr(name, 0, 5) name
from users) a
group by a.name;
在许多其他主要数据库中,尝试更快的别名!
select count(user_id), substr(name, 0, 5) name
from users
group by name;