J'ai la requête Sélectionnez ID, max (valeur) à partir de table1 code> et il renvoie la valeur correcte, mais il prend le premier identifiant de la table au lieu de celui correspondant à la valeur renvoyée (ID est la clé primaire).
J'ai déjà vu des solutions, mais ils avaient tous besoin d'une clause où je ne peux pas utiliser dans mon cas. P>
3 Réponses :
Je pense que vous avez oublié un groupe par clause:
SELECT id, MAX(value) FROM table1 GROUP BY id HAVING MAX(value) = (SELECT MAX(value) FROM table1)
qui retourne plus de résultats que je le souhaite (il renvoie deux identifiants même s'il ne doit que renvoyer l'ID de valeur maximale réelle)
Voir mon édition (je n'ai pas utilisé où la clause comme vous l'avez dit que vous ne pouviez pas utiliser une pour quelque raison que ce soit)
Je crois que ce que vous essayez de faire est de renvoyer l'identifiant de la ligne avec la valeur maximale. Est-ce correct?
Je suis curieux Pourquoi vous ne pouvez pas utiliser une clause où? P>
Mais d'accord, en utilisant cette contrainte, cela peut être résolu. Je vais supposer que votre table est unique sur ID (sinon, vous devriez vraiment parler à celui qui l'a construit et demandez pourquoi em>?) P> SELECT id, max(value) as max_value
FROM table1
GROUP BY id
ORDER BY max_value DESC
LIMIT 1
Semble mieux que ma solution, génial.
Ce sont des sortes non déterministes ("aléatoires") où n'importe quel enregistrement correspondant B> lorsque Valeur code> Les valeurs de colonne sont égales pourraient être la correspondance "première" i> que le résultat de l'enregistrement puisse changer sur chaque requête ... de toute façon il n'y a plus de chose comme le premier dans SQL, sans définir un tri déterministe (fixe) pour définir comment gérer les cravates que la pagination / le lot> Toujours B> nécessite un sens Utilisation de Commander par la valeur Desc, ID ASC / DESC CODE> Colonne d'identification d'asumation comportant un Primaire / unique CODE> KEY ..
Premièrement, pour répondre à la raison pour laquelle votre requête se comporte de la manière dont vous observerez: je soupçonne que vous exécutez sans Si seulement_full_group_by est désactivé, une extension MySQL à l'utilisation standard SQL de groupe en permet la sélection de la liste, la condition ou la commande par liste de se reporter à des colonnes non grotégées, même si les colonnes ne dépendent pas fonctionnellement du groupe par colonnes. Cela provoque que MySQL accepte la requête précédente. Dans ce cas, le serveur est libre de choisir n'importe quelle valeur de chaque groupe, de sorte qu'elles soient identiques, les valeurs choisies sont nondéterministes, ce qui n'est probablement pas ce que vous voulez. P>
blockquote> Dans ce cas, puisque vous n'avez pas de groupe Pour obtenir un identifiant associé à La plus grande valeur de la table, vous pouvez sélectionner toutes les lignes, commander par la valeur (décroissante), puis simplement limiter au premier résultat, pas besoin d'un opérateur d'agrégation (ou d'un sql_mode = seulement_full_group_by code> car votre requête serait probablement
de la clause code>, la table entière est effectivement du groupe. P> où code> calus) : P> SELECT id, value FROM table1 ORDER BY value DESC, id ASC LIMIT 1
Vous semblez avoir complètement supprimé la fonction max () code>, était cette intensité
C'est vrai, j'ai, parce que ce n'est pas nécessaire. La commande par valeur dans un ordre décroissant aura le premier résultat soit une ligne avec la valeur maximale.
... Non ... @robsiember C'est ici que vous vous trompez .. Il s'agit d'une sorte non déterministe ("aléatoire") trier où n'importe quel enregistrement correspondant B> sur la valeur code> Valeurs de la colonne code> sont égaux pourraient être le "premier" i>, outre que le résultat d'enregistrement peut changer sur chaque demande.
Comme je l'ai noté, il vous donnera une ligne i> avec la valeur maximale, mais la question n'est pas claire si elle recherche une seule rangée ou toutes les lignes.
Quoi qu'il en soit, j'ai mal interprété un peu ce que vous vouliez dire de toute façon il n'y a plus de choses comme d'abord dans SQL, sans définir un tri déterministe (fixe) pour définir comment manipuler les cravates que la pagination / lots> Toujours B> nécessite un sens en utilisant Commander par la valeur Desc, ID ASC / DESC CODE> Colonne d'identification d'asumation ayant un Primaire / unique CODE> Clé ..
Merci, j'ai incorporé votre clarification, c'est utile.
Pourquoi devrais-je fournir un exemple de reproductible minimal pour une requête SQL très simple?
Pensez-y, tout
ID code> que vous sortiez de cette requête n'aura aucun sens. Vous acceptez un certain nombre de lignes afin que l'un des identifiants de l'une des lignes utilisées n'a pas de sens