2008-12-08 4 views
2

Quelle est la manière correcte d'extraire les valeurs maximales de toutes les colonnes d'une table avec une seule requête? Merci. Clarification: la même requête devrait fonctionner sur n'importe quelle table, c'est-à-dire que les noms de colonne ne doivent pas y être codés en dur.Requête MySQL pour max() de toutes les colonnes

Répondre

0

Vous allez devoir le faire en deux étapes - une pour récupérer la structure de la table, suivie d'une deuxième étape pour récupérer les valeurs maximales pour chaque

en php:

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

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

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

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

//process the results.... 
+0

En fait, je l'ai fait en Python. Je marque votre réponse comme acceptée, même si je m'attendais initialement à une solution SQL uniquement. Merci. – dpq

5
SELECT max(col1) as max_col1, max(col2) as max_col2 FROM `table`; 
+0

Je suis d'accord avec gnud – Samiksha

+0

Y at-il une requête qui peut être appliquée à n'importe quelle table? C'est à dire. si je ne sais pas quelles colonnes contient une table à l'avance. – dpq

+0

Vous pouvez utiliser DESCRIBE 'table' pour obtenir les colonnes – Greg

0

Je pense (mais serais heureux d'être montré mauvais) que vous devez savoir au moins le nombre de colonnes dans la table, mais vous pouvez faire:

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; 

Évidemment, vous perdez tous les avantages de l'indexation.

Questions connexes