私は次のようなテーブルを持っています:
id col1 col2
1 a 55
2 b 77
結果として、私は見たい:
id col1 col2 MIN(col2)
1 a 55 55
2 b 77
そのようなもの、または他の場合、テーブル全体で1つの最小値を取得する方法.
テーブル全体の値をCROSS JOIN
選択するサブクエリでa を使用できます。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 を参照してください
比較する列が複数ある場合は、クエリを使用してデータのピボットを解除し、結果の値を選択できます。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 を参照してください
できません。列の数は固定されているため、@bluefeet で説明されているように、すべての行で最小値を取得できます。
ロジックを使用して、より少ない数の行 (通常は 1) で取得できます。
(case when t2.minCol2 = t1.col2 then t2.minCol2 end)
ただし、これにより、他の行に NULL が設定されます。