如何用整个表显示MIN值

时间:2013-02-19 21:48:43

标签: mysql select min

我的表格如下:

id col1 col2
1   a    55
2   b    77

结果我想看:

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

类似的东西,或者在其他情况下,我怎么能用整张表得到一个最小值。

2 个答案:

答案 0 :(得分: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

如果您要比较多个列,则可以使用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 :(得分:1)

你做不到。列数是固定的,因此您可以按照@bluefeet的描述获取所有行的最小值。

您可以使用逻辑

在较少的行(通常为1)上获取它
(case when t2.minCol2 = t1.col2 then t2.minCol2 end)

但这会将NULL放在其他行上。