是否可以将选择值分配给sql中的变量?

时间:2014-03-04 07:58:41

标签: sql database oracle

如何将选定的值分配给变量,以便我可以在嵌套的sql中重用该值?例如,我可能有这样的东西:

select count(user_id), substr(name, 0, 5)
from users
group by substr(name, 5);

但在这种情况下,select子句中的substr值可能与group by子句中的substr值不一致。如果我可以将substr值中的一个赋值给变量并重用它,那将会很好。这将确保值一致。我怎样才能在Oracle中实现这一目标?

3 个答案:

答案 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;