tags:

views:

910

answers:

3

Hello, What is the correct way of retrieving maximum values of all columns in a table with a single query? Thanks.

Clarification: the same query should work on any table, i.e. the column names are not to be hard-coded into it.

+3  A: 
SELECT max(col1) as max_col1, max(col2) as max_col2 FROM `table`;
gnud
I agree with gnud
Samiksha
Is there a query that can be applied to any table? I.e. if I don't know what columns does a table contain beforehand.
David Parunakian
You can use DESCRIBE `table` to get the columns
Greg
Sure, desc `table` will work. But what if I have several dozens of tables, for which I need to run this operation? Is there an accepted way of automating such a task?
David Parunakian
A: 

I think (but would be happy to be shown wrong) that you have to know at least the number of columns in the table, but then you can do:

select max(c1),max(c2),max(c3),max(c4),max(c5)
from (
    select 1 c1, 1 c2, 1 c3, 1 c4, 1 c5 from dual where 0
    union all
    select * from arbitrary5columntable
) foo;

Obviously you lose any benefits of indexing.

ysth
A: 

You're going to have to do it in two steps - one to retrieve the structure of the table, followed by a second step to retrieve the max values for each

In php:

$table = "aTableName";
$columnsResult = mysql_query("SHOW COLUMNS FROM $table");

$maxValsSelect = "";
while ($aColumn = mysql_fetch_assoc($columnsResult)) {
  if (strlen($maxValsQuery) > 0) {
    //Seperator
    $maxValsSelect .= ", ";
  }  

  $maxValsSelect .= "MAX(" . $aColumn['Field'] . ") AS '" . $aColumn['Field'] "'";
} 

//Complete the query
$maxValsQuery = "SELECT $maxValsSelect FROM $table";
$maxValsReault = mysql_query($maxValsQuery);

//process the results....
iAn
Actually, I just did that in Python. I mark your answer as accepted, although I was initially expecting an SQL-only solution. Thanks.
David Parunakian