2013-02-19 50 views
0

我有表所示:如何顯示與全表最小值

id col1 col2 
1 a 55 
2 b 77 

在結果,我想看到:

id col1 col2 MIN(col2) 
1 a 55 55 
2 b 77 

類似的東西,或在其他情況下,我怎麼能得到整個表的一個最小值。

+0

我會建議你解僱兩個查詢(一個用於結果,一個用於最小值)而不是複雜化。 – Slowcoder 2013-02-19 21:56:26

+0

Slowcoder,謝謝。我覺得生病了。 – 2013-02-20 14:06:15

回答

1

您可以使用CROSS JOIN使用子查詢,將選擇整個表min(col2)值:

select t1.id, 
    t1.col1, 
    t1.col2, 
    t2.minCol2 
from yourtable t1 
cross join 
(
    select min(col2) minCol2 
    from yourtable 
) t2 

SQL Fiddle with Demo

如果要將此擴大到只顯示第一行的min(col2)值,那麼你可以使用用戶定義的變量:

select id, 
    col1, 
    col2, 
    case when rn = 1 then mincol2 else '' end mincol2 
from 
(
    select t1.id, 
    t1.col1, 
    t1.col2, 
    t2.minCol2, 
    @row:=case when @prev:=t1.id then @row else 0 end +1 rn, 
    @prev:=t1.id 
    from yourtable t1 
    cross join 
    (
    select min(col2) minCol2 
    from yourtable 
) t2 
    cross join (select @row:=0, @prev:=null) r 
    order by t1.id 
) d 
order by id 

SQL Fiddle with Demo

如果你有一個以上的列那麼你可以用unpivot這個數據使用UNION ALL查詢,然後選擇min的值作爲結果:

select t1.id, 
    t1.col1, 
    t1.col2, 
    t2.MinCol 
from yourtable t1 
cross join 
(
    select min(col) MinCol 
    from 
    (
    select col2 col 
    from yourtable 
    union all 
    select col3 
    from yourtable 
) src 
) t2 

請參閱SQL Fiddle with Demo

1

您不能。列數是固定的,所以您可以按@bluefeet所描述的方式獲取所有行的最小值。

你可以通過使用邏輯得到它在一個較小的行數(通常爲1):

(case when t2.minCol2 = t1.col2 then t2.minCol2 end) 

但是,這將使NULL值的其他行。

相關問題