【问题标题】:Selecting column with highest value in SQL [duplicate]在SQL中选择具有最高值的列[重复]
【发布时间】:2014-02-17 14:24:06
【问题描述】:

我有一张类似下面的表格

column1 | column2 | column3 | column4
   43        12        1        132

显然,'column4' 具有最高值。所以我的目标是检索此列。

想要的结果:

   column4
     132

【问题讨论】:

  • 你完全不知道自己在做什么,对吗?
  • 之前询问并回答:*.com/questions/17845555/… 使用 GREATEST。小提琴示例:sqlfiddle.com/#!2/4e850/1/0
  • 确实如此,但我将如何保留列的名称?您的参考仅告诉您获取最高列的值。
  • @user3135626 。 . .列可以有NULL 值吗?

标签: php mysql sql multiple-columns


【解决方案1】:

试试GREATEST()函数:

SELECT GREATEST(column1, column2 colum3, column4)
FROM table

【讨论】:

  • 这是一个很好的解决方案,但是我将如何保留列的名称?
  • 您不能使用最大的并且只返回 1 列。一列不能有两个名称,第 1 行的最大名称是第 1 列,第 2 行的第 4 列。不能两者兼有,因此您必须为该列设置别名或获取系统分配的名称。
  • 那为什么建议使用 GREATEST() 函数呢?我在上面明确指出,我想获取值并保留列的名称。
  • 一个人不应该“把礼物马放在嘴里”,事实上。 @user3135626 - 您的评论听起来像是您在餐厅点了牛排,却得到了咸牛肉。
  • 对不起,我在你的问题中读到“想要检索这个值”。如果您需要每行的最高值的列名和值,您应该使用 Gordon 的答案或在 php.ini 中解析结果。没有必要仅仅因为您对“明确陈述”的定义与我的不同就对 SO 采取积极态度。
【解决方案2】:

如果你想要列名:

select greatest(column1, column2, column3, column4) as biggestval,
       (case when column1 = greatest(column1, column2, column3, column4)  then 'column1'
             when column2 = greatest(column1, column2, column3, column4)  then 'column2'
             when column3 = greatest(column1, column2, column3, column4)  then 'column3'
             when column4 = greatest(column1, column2, column3, column4)  then 'column4'
        end) as biggestval_columnname

请注意,如果任何列具有 NULL 值,这将不起作用。

【讨论】:

  • 酷!但是我将如何保留列的名称?如第4列:132?
  • @user3135626 。 . .这有两列,一列是值,一列是列名。
  • 再次感谢兄弟!这完成了工作!
【解决方案3】:

试试这个:

SELECT
   CASE
       WHEN column1 >= column2 AND column1 >= column3 THEN column1
       WHEN column2 >= column1 AND column2 >= column3 THEN column2
       WHEN column3 >= column1 AND Date3 >= column2 THEN column3
       ELSE  column1 
   END AS TopColumn

没有一个 SQL 标准函数可以满足您的要求

【讨论】:

【解决方案4】:

将您的值存储在数组中并使用函数 PHP MAX ,试试这个

$sql = 'SELECT column1, column2, column3, column4 FROM table';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$t_number=array();
$i=0;
while($data = mysql_fetch_assoc($req)){
  $t_number[$i]=array(
        $data['column1'],
        $data['column2'],
        $data['column3'],
        $data['column4']
 );
   $maxValue=max($t_number[$i]);
   echo $maxValue;
   $i++;
}

【讨论】:

  • 这看起来很有希望,但是,在未来,请使用mysqli_* 而不是基于mysql_* 的函数。有些人可能会因此而反对这一点,但不是我;这不是我的风格;-)