[英]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 by
的order 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.