簡體   English   中英

是否可以將選擇值分配給sql中的變量?

[英]Is it possible to assign select values to variables in sql?

如何為變量分配選定的值,以便可以在嵌套sql中重用該值? 例如,我可能有類似以下內容的內容:

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

但在這種情況下, substr選擇子句中值可以是與所述不一致substr由條款組中的值。 如果我可以將substr值之一分配給變量substr用它,那將是很好的。 這將確保值是一致的。 我如何在Oracle中實現這一目標?

如果您希望分配變量,則需要切換到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

為了避免選擇列表和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;

在這個簡單的示例中,這似乎有些矯kill過正,但是對於復雜的case語句等卻很有用。 盡管Oracle會因您輸入錯誤而抱怨。

您需要子查詢,因為Oracle 不允許您在同一級別的查詢中使用列別名,除了order byorder by之外 ,因為查詢是在內部構造的。

嘗試使用別名; 其他操作(如在子查詢中調用)是昂貴的操作

在甲骨文中

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM