0

私は次のようなテーブルを持っています:

id col1 col2
1   a    55
2   b    77

結果として、私は見たい:

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

そのようなもの、または他の場合、テーブル全体で1つの最小値を取得する方法.

4

2 に答える 2

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 ALLmin

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 を参照してください

于 2013-02-19T21:51:07.737 に答える
1

できません。列の数は固定されているため、@bluefeet で説明されているように、すべての行で最小値を取得できます。

ロジックを使用して、より少ない数の行 (通常は 1) で取得できます。

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

ただし、これにより、他の行に NULL が設定されます。

于 2013-02-19T21:54:45.750 に答える