2010-08-27 36 views
1

想法是在結果中獲得一個描述用戶「類別」的新列。根據用戶的年齡,該類別可以是「未滿18歲」,「正常」,「超過65歲」。SQL:根據字段描述用戶類別的返回字符串

也就是說,對於我表中的每個用戶,我希望在名爲「category」的列中獲得其ID和此描述的結果。

你將如何進行?我需要這個,因爲數據稍後將轉到JSON對象和ExtJS網格以進行可視化。

回答

0

在查詢級別這可以用CASE表達來完成:

select 
    user_id, 
    case when age < 18 then 'under18' 
     when age <=65 then 'normal' 
     when age > 65 then 'over65' 
     else null end as category 
from 
    Users 

但是我建議從查詢級移動這個應用級別。您已經擁有應用程序邏輯來從數據集中構建JSON,這將是一個更適合從年齡值生成類別名稱的地方。

4

由於您的類別是從現有數據派生的數據,因此應該不鼓勵在數據庫中使用新列。相反,您可以將一個case語句添加到數據庫查詢中,以根據需要計算出該類別,或將其放入數據庫的視圖中。

查詢會是這個樣子:

select 
    ... 
    case when Age < 18 then 'under18' 
     when Age > 65 then 'over65' 
     else 'normal' end AS Age_Category 
from ... 
0

如果您的數據庫管理系統支持它,我會創建一個UDF(用戶定義的函數),從您的表中傳遞年齡並返回類別。這具有可重複使用和清潔一點的優點。如果這僅用於一個查詢,則只需使用CASE聲明。

+1

使用UDF的一個問題是它每次需要調用時都會產生開銷。但對於複雜的類別,它們可能是唯一的方法。 – 2010-08-27 11:49:18

+0

這種case語句的語法是否真的有效?如果是的話在哪個DBMS的? – 2010-08-27 11:51:16

+0

我的不好,你只能按照我的方式做,當你比較一個值,而不是使用小於或大於。這是我通常在進行直觀平等測試時寫的,因爲它使它們縮短了一些。 – Jay 2010-08-27 12:00:01