web-dev-qa-db-fra.com

SQL: Trouver l'enregistrement max par groupe

Duplicata possible:
Récupération du dernier enregistrement de chaque groupe

J'ai une table, qui a trois champs et données.

 Nom, haut, total 
 Chat, 1, 10 
 Chien, 2, 7 
 Chat, 3, 20 
 Cheval, 4, 4 
 chat, 5, 10 
 chien, 6, 9 

Je veux sélectionner l'enregistrement qui a la valeur la plus élevée de Total pour chaque Name, donc mon résultat devrait être comme ceci:

 Nom, Haut, Total 
 Chat, 3, 20 
 Cheval, 4, 4 
 Chien, 6, 9 

J'ai essayé de grouper par nom par ordre de total, mais cela donne le meilleur record de groupe par résultat. Quelqu'un peut-il me guider, s'il vous plaît?

23
user319088
select
  Name, Top, Total
from
  sometable
where
  Total = (select max(Total) from sometable i where i.Name = sometable.Name)

ou

select
  Name, Top, Total
from
  sometable
  inner join (
    select max(Total) Total, Name
    from sometable
    group by Name
  ) as max on max.Name = sometable.Name and max.Total = sometable.Total
31
Tomalak

Vous pouvez essayer quelque chose comme

SELECT  s.*
FROM    sometable s INNER JOIN
        (
            SELECT  Name,
                    MAX(Total) MTotal
            FROM    sometable
            GROUP BY Name
        ) sMax  ON  s.Name = sMax.Name 
                AND s.Total = sMax.MTotal
5
Adriaan Stander

Ou en utilisant une clause Exists, qui retourne la seule ligne qui existe dans les deux tables

SELECT * from sometable T
where exists
(select 1
from (SELECT nombre, max(total) as total FROM  sometable TT
    GROUP by nombre) TT
where T.name=TT.name
and T.total=TT.total
)
0
Claudia