0
votes

Comment obtenir un certain record après "groupe par" opération

tel que j'ai une table comme:

 Entrez la description de l'image ici P>

Je veux obtenir le plus haut élève de chaque classe. Comment puis-je faire? P>

select * 
from (select * 
      from stu 
      order by height desc) 
group by class_id


2 commentaires

Vous avez besoin de 2 copies de la table - on est utilisée pour obtenir la valeur de hauteur la plus élevée dans la sous-requête et la seconde pour obtenir l'enregistrement entier qui correspond à cette valeur.


Cela ne fonctionne pas car il est cassé SQL. SELECT * avec Groupe par n'a pas de sens et renvoie une erreur dans presque toutes les bases de données, y compris les versions les plus récentes de MySQL.


3 Réponses :


1
votes
select *
from stu s
where height = (select max(height) from stu s1
                where s1.class_id = s.class_id
                group by class_id)
Here is a demo

0 commentaires

1
votes
SELECT t1.* 
FROM stu t1
JOIN ( SELECT class_id, MAX(height) height 
       FROM stu 
       GROUP BY class_id ) t2 USING (class_id, height)
If more than one student have the same maximal height over a class then all of them will be returned.

0 commentaires

1
votes

Vous avez besoin d'une sous-requête pour une hauteur maximale et de rejoindre

select * from stu 
inner join  (
  select class_id , max(height)  max_class_height
  from stu 
  group by  class_id

  ) t on t.class_id = stu.class_id and t.max_class_height = stu.height


0 commentaires