我有表所示:如何顯示與全表最小值
id col1 col2
1 a 55
2 b 77
在結果,我想看到:
id col1 col2 MIN(col2)
1 a 55 55
2 b 77
類似的東西,或在其他情況下,我怎麼能得到整個表的一個最小值。
我有表所示:如何顯示與全表最小值
id col1 col2
1 a 55
2 b 77
在結果,我想看到:
id col1 col2 MIN(col2)
1 a 55 55
2 b 77
類似的東西,或在其他情況下,我怎麼能得到整個表的一個最小值。
您可以使用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
如果要將此擴大到只顯示第一行的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
如果你有一個以上的列那麼你可以用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
您不能。列數是固定的,所以您可以按@bluefeet所描述的方式獲取所有行的最小值。
你可以通過使用邏輯得到它在一個較小的行數(通常爲1):
(case when t2.minCol2 = t1.col2 then t2.minCol2 end)
但是,這將使NULL值的其他行。
我會建議你解僱兩個查詢(一個用於結果,一個用於最小值)而不是複雜化。 – Slowcoder 2013-02-19 21:56:26
Slowcoder,謝謝。我覺得生病了。 – 2013-02-20 14:06:15