2012-10-09 45 views
1

假設所有值列具有相同的數據類型。我想在SELECT查詢的結果中使用id中的最高值。如何比較多個列的值?

表結構:

table_a: id, value1, value2, value3, value4, value5 

示例數據:

id, value1, value2, value3, value4, value5 
2, 125, 256, 133, 400, 67 
3, 14, 14, 14, 3, 6 
4, 325, 441, 441, 975, 3 

例期望的結果:

id, highest_value 
2, 400 
3, 14 
4, 975 

我開始向下一個CASE語句的路徑,但是,進行了凌亂的快。我厭倦了一個子選擇,但沒能實現這個目標。有沒有一種乾淨的方式來比較幾個列值彼此?

回答

5

在這種情況下greatest函數會做這項工作。

with t1(id1, val1, val2, val3, val4, val5) as 
(
    select 2, 125, 256, 133, 400, 67 from dual union all 
    select 3, 14, 14, 14, 3, 6 from dual union all 
    select 4, 325, 441, 441, 975, 3 from dual 
) 

select id1 
    , greatest(val1, val2, val3, val4, val5) Res 
    from t1 

結果:

Id1 Res 
--------------- 
2 400 
3 14 
4 975 
+0

這正是我一直在尋找。我在尋找解決方案時錯過了最大的功能,感覺有點傻。 – jzd