2014-02-17 3 views
0

У меня есть таблица, которая является чем-то вроде нижеВыбор столбца с наибольшим значением в SQL

column1 | column2 | column3 | column4 
    43  12  1  132 

Очевидно, что «column4» имеет наибольшее значение. Поэтому моя цель - получить этот столбец.

результаты Желание:

column4 
    132 
+0

Вы полностью не знаете, что делаете, правильно? – user3135626

+0

Aksed и ответил ранее: http://stackoverflow.com/questions/17845555/mysql-max-value-from-3-different-columns используют GREATEST. Пример скрипта: http://sqlfiddle.com/#!2/4e850/1/0 – xQbert

+0

Это правда, но как бы сохранить имя столбца? В вашей ссылке указывается, что вы получите значение с наибольшим столбцом. – user3135626

ответ

5

Если вы хотите, чтобы имя столбца:

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 значения.

+0

Прохладный! Но как бы сохранить имя столбца? Например, столбец 4: 132? – user3135626

+0

@ пользователь3135626. , , Он имеет два столбца: один со значением и один с именем столбца. –

+0

Еще раз спасибо bro! Это сработало! – user3135626

0

Попробуйте это:

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, которая делает то, что вы просили

+0

Это из-за этого? http://stackoverflow.com/questions/71022/sql-max-of-multiple-columns – MackieeE

+0

Да! Это логическое решение с вашего поста – Ganz

6

Попробуйте функцию GREATEST():

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

Это хорошее решение, но как бы сохранить имя столбца? – user3135626

+0

Вы не можете использовать наибольший и только 1 столбца. Столбец не может иметь двух имен, наиболее подходящих для строки 1, это столбец 1, но столбец 4 для строки 2. Он не может быть обоим, поэтому вы должны использовать псевдоним столбца или получить имя, назначенное системе. – xQbert

+0

Тогда зачем предлагать функцию GREATEST()? Я ясно заявил выше, что хочу получить значение и сохранить имя столбца. – user3135626

0

со ваше значение в массиве и использования функции 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++; 
} 
+1

Это выглядит многообещающим, однако в будущем используйте 'mysqli_ *' вместо 'mysql_ *'. Некоторые из них могут уменьшить это из-за этого, но не я; это не мой стиль ;-) –

Смежные вопросы