2010-11-22 8 views
0

J'ai une requête avec de nombreux critères de wheres et de commandes. Un des champs de select est 'price' (prix de l'élément) mais j'aimerais aussi (dans chaque ligne) le prix maximum de tous les éléments sélectionnés.Comment obtenir la valeur maximale d'un champ sans regroupement dans MySql

J'ai essayé d'inclure la fonction d'agrégation MAX sur select en espérant que cela retournera la valeur désirée, mais insetead de cela, prix et MAX (prix) revient le même. Recherche dans MySql doc J'ai trouvé la raison:

Si vous utilisez une fonction de groupe dans un communiqué ne contenant pas de clause GROUP BY , il est équivalent au regroupement sur toutes les lignes.

Existe-t-il un moyen de résoudre ce problème?

Merci d'avance!

Il y a une question similaire (mais pas résoudre ce): find max value without aggregate operator in mysql

+2

ressemble sous-requête peut corriger, mais sans schéma de la table, c'est pas grand-chose peut deviner, s'il vous plaît mettre à jour la question sera schéma de table complet – ajreal

+0

voulez-vous le max (prix) dans le tableau ou max (prix) dans l'ensemble de données sélectionné? – Ronnis

Répondre

0

Peut-être que vous pourriez utiliser une procédure stockée comme ceci:

CREATE PROCEDURE QueryWithMax ([parameter list if necessary]) 
BEGIN 

    -- Obtain the maximum price 
    DECLARE x INT UNSIGNED; -- change datatype if appropriate 
    SET x = SELECT 
       MAX(price) 
      FROM 
       ... 
      WHERE 
       ... 
      ; 

    -- Now do your query 
    SELECT 
     price, 
     [other columns], 
     x AS MaxPrice 
    FROM 
     ... 
    WHERE 
     ... 
    GROUP BY 
     ... 
    ; 

END 
0

Je ne l'ai pas essayé, mais si vous aviez un sous-requête cela extrait le prix maximum (donc vous obtenez une ligne), puis faites une jointure croisée (produit cartésien) avec celui-ci. Vous devriez obtenir quelque chose comme ce que vous voulez. Je ne peux pas garantir à quelle vitesse ce serait.

0

Vous pouvez le faire:

SELECT 
    id, 
    price, 
    (SELECT MAX(price) FROM your_table) AS max_price 
FROM your_table 

Je ne sais pas pourquoi vous voulez retourner cette valeur sur chaque ligne mais ... Je ferais probablement cela dans deux requêtes distinctes, ou bien utiliser un UNION ALL:

SELECT id, price FROM your_table 
UNION ALL 
SELECT NULL, MAX(price) FROM your_table