我的表格如下:
id col1 col2
1 a 55
2 b 77
结果我想看:
id col1 col2 MIN(col2)
1 a 55 55
2 b 77
类似的东西,或者在其他情况下,我怎么能用整张表得到一个最小值。
答案 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
如果要将其展开为仅在第一行显示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
如果您要比较多个列,则可以使用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
答案 1 :(得分:1)
你做不到。列数是固定的,因此您可以按照@bluefeet的描述获取所有行的最小值。
您可以使用逻辑
在较少的行(通常为1)上获取它(case when t2.minCol2 = t1.col2 then t2.minCol2 end)
但这会将NULL放在其他行上。