如何用SQL实现两列MAX值中取MAX值

日期: 2008-07-01 作者:Rudy Limeback 来源:TechTarget中国 英文

问:我可不可以使用如下查询语句把两列的最大值中取得最大值:   max( max(col1) from table1),  max(col2) from table2) ) as col3    如果可以,在max的地方应该使用什么命令?   答:这个问题的答案是使用GREATEST函数。但是,我们必须先对你的表达式作出一些小小的改动,这样查询才能有效。  select greatest(    ( select max(col1)&n……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问:我可不可以使用如下查询语句把两列的最大值中取得最大值:  


max( max(col1) from table1), 
max(col2) from table2) ) as col3 

  如果可以,在max的地方应该使用什么命令?

  答:这个问题的答案是使用GREATEST函数。但是,我们必须先对你的表达式作出一些小小的改动,这样查询才能有效。 


select greatest( 
  ( select max(col1) from table1 ) 
  , ( select max(col2) from table2 ) 
  ) as col3 

  在这个表达式中每个子查询能产生一个值,然后GREATEST函数——作为一个纯量函数,跟MAX相反,属于聚合函数——会选择子查询产生的值中的最高值。

  如果你的数据库系统不支持标准SQL GREATEST函数,可以使用这样的表达式:


select case when max1 > max2 
  then max1 
  else max2 
  end as col3 
  from ( select max(col1) as max1 
  from table1 
  ) as t1 
  cross 
  join ( select max(col2) as max2 
  from table2 
  ) as t2 

  为什么要使用交叉联接(cross join)?因为每一个派生表(t1和t2)只返回一行,所以交叉联接只产生一行和两列,max1和max2。

  注意GREATEST函数可以运用于多个值。而有多于两个值的时候使用CASE函数就变得复杂和麻烦。

相关推荐