Comment utiliser MAX() sur une sous-requête?
Je suis nouveau à l'Oracle et SQL monde. J'ai un léger problème avec une requête que je ne peux pas comprendre pour la vie de moi, j'ai passé quelques heures à essayer différentes approches et je ne peux pas obtenir le résultat que j'attends. Donc voici ma requête:
SELECT *
from(Select membership.mem_desc,membership.mem_max_rentals,membership_history.mem_type,
count(membership_history.MEM_TYPE) as membership_count
from membership_history
JOIN membership ON membership.mem_type = membership_history.mem_type
group by (membership_history.mem_type,membership.mem_desc,membership.mem_max_rentals)
) g
WHERE g.membership_count = (select MAX(membership_count) from g);
De sorte que la requête interne fonctionne parfaitement et renvoie les deux résultats. Maintenant que j'ai ces deux valeurs, je suis à essayer de comprendre comment retourner la ligne avec la valeur maximale de membership_count qui Est l'endroit où je reçois coincé. Dans la requête ci-dessus j'ai essayé d'utiliser le MAX() dans la clause where, mais à l'intérieur que de sélectionner, je reçois l'erreur "table not found" (qui signifie "g"). Donc ma question est comment puis-je utiliser le MAX() la fonction sur les résultats de mon sous-requête? Des idées ou des suggestions seraient grandement appréciés!!!!!
OriginalL'auteur user1916441 | 2013-04-24
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de la sous-requête qui recherche la valeur maximale.
Au lieu de cela,, vous avez juste besoin de la première ligne après avoir commandé les lignes:
OriginalL'auteur Bohemian
C'est une bonne chose SQL.
La meilleure façon de trouver la valeur d'une colonne à l'aide de la max de colonne de clé primaire de la valeur est:
cet exemple retourne une valeur scalaire.
OriginalL'auteur user3552157
J'ai eu un problème similaire au sein d'une Requête Access ... basé sur certains des commentaires dans ce fil, devons-nous comprendre que l'ACCÈS MAX fonction doit être utilisée uniquement sur/avec les Champs de Clé Primaire? ... en gros, j'ai un tableau qui définit les Adresses relatives à une Entité, MAIS avec une légère torsion; 1) une fois enregistré, aucun enregistrement n'est autorisé à être modifié ou supprimé (ce qui signifie une Entité peut avoir plusieurs Enregistrements d'adresse), 2) toute Entité actuel de l'Adresse peuvent avoir; à la MAISON (1) ou à la MAISON et de MESSAGERIE (2 dossiers) ... chaque enregistrement d'Adresse a un (ID) (numéroauto CLÉ Primaire) une MAISON ID (HID) correspondant à la MAISON de l'enregistrement (ID) (HID n'est PAS une CLÉ Primaire et n'est PAS unique) et un ID de l'Entité (EID) ... donc ... quand je tente d'utiliser une sous-requête pour obtenir le max(HID) de la valeur pour une Entité donnée, je veux seulement l'Adresse actuelle retourné ... ce que j'ai trouvé en utilisant le MAX dans une sous-requête est elle échoue en raison de l'ACCÈS de manière incorrecte pense qu'il a trop de dossiers pour la sous-requête ... ou ... il renvoie incorrectement lignes, il ne devrait pas être de retour.
Le seul moyen que j'ai trouvé pour contourner ce problème est de remplacer le max de sous-requête avec une Fonction Max qui retourne le MAX CACHÉ de la Valeur pour une Entité (la fonction utilise la sous-déclaration de la requête à l'aide de DAO logique dans VBA)
Est ici la MAISON de la sous-requête qui fait partie de la Requête principale (la requête principale doit retourner une ligne par entité; de l'AÏD, à la Maison.Adresse, Mail.Adresse)
La requête principale ne fonctionne correctement que lorsque les clauses where à la fois à la Maison et de la poste (non montré) sont remplacés par la fonction ci-dessous. Si le MAX de sous-requête est inclus comme ci-dessus, il ne fonctionne pas.
Donc, si la fonction MAX nécessite un champ de CLÉ PRIMAIRE à travailler, ce qui pourrait expliquer pourquoi mes questions sont un échec, même si, ça sonnerait comme une limitation majeure.
Ici est quelques données de test qui ne devrait revenir 3 lignes
Une dernière remarque, plusieurs versions de l'Accès Pro; 2002, 2003, 2016 ont été testés et tous les mêmes résultats. Donc, cette question est soit inhérente au caprice de la fonction max ou une sorte de bug qui a peut-être été ignoré ou passé inaperçu? ... la fonction fonctionne comme une solution de contournement pour moi, mais peut ne pas fonctionner pour les autres si ce serait bien si la fonction MAX est précisé.
OriginalL'auteur bxdobs
Vous pouvez essayer quelque chose comme
OriginalL'auteur Scotch
Vous ne pouvez pas utiliser une table dérivée directement dans la clause where, il donnera
table or view does not exist
erreurdonc, pour obtenir le max de comptage de la valeur, vous pouvez utiliser
HAVING
clause ouAnalytical Functions
ouRownum
comme(OU)
(OU)
OriginalL'auteur Aspirant
Je pense que la solution la plus propre est d'utiliser la TOUTE condition de comparaison. Il est utilisé pour comparer une valeur à une liste ou d'une sous-requête.
OriginalL'auteur max68