ID POSITION EXPERIENCE SALARY 1 top 90 1500 2 bottom 100 1500 3 top 90 750 4 left 90 1000 5 right 100 1300 6 top 90 1500 7 left 80 2000 8 top 80 1000 9 bottom 100 2000 10 left 100 2000
Donc, voici mon SERVICE de table, où (comme nous pouvons le voir) l'expérience maximale est de 100. J'ai besoin d'écrire une requête pour trouver le nombre d'occurrences de 100 dans l'expérience pour chaque groupe formé par position (gauche, droite, haut, bas).
Alors j'ai écrit :-
select position,count(*) from service group by position having experience=(select max(experience) from service);
Résultat attendu :-
POSITION COUNT(*) bottom 2 left 1 right 1 top 0
Mais, Cela m'a donné une erreur : - "Pas une expression GROUP BY"
Ma logique est que je le divise d'abord en groupes, puis j'utilise la clause have pour compter les tuples de chaque groupe avec une expérience égale à la valeur maximale. expérience.
Une solution consiste à utiliser une jointure gauche avec une sous-requête, qui ne renvoie que la valeur maximale. Un cas est nécessaire pour renvoyer le groupe avec une valeur maximale arbitraire.
https://dbfiddle.uk/-8pHZ8wm
Pour faciliter la compréhension, exécutez la requête ci-dessous et vous constaterez que max_experience est vide dans chaque ligne de la table de service, à l'exception de la valeur 100. En termes simples, il vous suffit de compter les lignes du groupe avec les valeurs 100 et 0 qui n'ont pas encore atteint la valeur d'expérience maximale.
https://dbfiddle.uk/al8YYLk9
Modifier. La réponse fonctionne également dans Oracle, mais les mots-clés après la sous-requête doivent être supprimés
as
https://dbfiddle.uk/hhGB_xXx
Utilisation
求和
:Voir violon.