Recherchez la valeur maximale dans le tableau puis affichez les groupes SQL séparément et le nombre de valeurs maximales dans chaque groupe SQL
P粉451614834
P粉451614834 2024-03-30 15:53:50
0
2
367

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.

P粉451614834
P粉451614834

répondre à tous(2)
P粉718730956

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.

SELECT s.position,
       sum(case when max_experience is null then 0 else 1 end ) as max_count
FROM service s
LEFT JOIN  ( select max(experience) as max_experience
             from service 
            ) as s1 ON  s.experience = s1.max_experience
group by s.position
order by max_count desc ;

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.

SELECT s.*,s1.*
FROM service s
LEFT JOIN  (select max(experience) as max_experience
             from service 
            ) as s1 ON  s.experience = s1.max_experience ;

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

SELECT s.position,
       sum(case when max_experience is null then 0 else 1 end ) as max_count
FROM service s
LEFT JOIN  ( select max(experience) as max_experience
             from service 
            )  s1 ON  s.experience = s1.max_experience
group by s.position
order by max_count desc ;

https://dbfiddle.uk/hhGB_xXx

P粉936568533

Utilisation 求和 :

select position, sum(experience = 100) from tbl group by position

Voir violon.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!