복붙노트

[SQL] SQL은 : 그룹 당 최대 기록을 찾기 [중복]

SQL

SQL은 : 그룹 당 최대 기록을 찾기 [중복]

나는 세 개의 필드와 데이터가 하나 개의 테이블을 가지고있다.

Name  , Top , Total
cat   ,   1 ,    10
dog   ,   2 ,     7
cat   ,   3 ,    20
horse ,   4 ,     4
cat   ,   5 ,    10
dog   ,   6 ,     9

나는 나의 결과는 다음과 같이해야하므로, 각 이름에 대한 총의 가장 높은 값을 갖는 레코드를 선택합니다 :

Name  , Top , Total
cat   ,   3 ,    20
horse ,   4 ,     4
Dog   ,   6 ,     9

나는 총에 의해 이름 순서에 따라 그룹을 시도하지만 결과에 의해 그룹의 최상위 기록을 제공합니다. 사람이 제발 안내 수 있습니까?

해결법

  1. ==============================

    1.

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

    또는

    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
    
  2. ==============================

    2.당신은 뭔가를 시도 할 수 있습니다

    당신은 뭔가를 시도 할 수 있습니다

    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
    
  3. ==============================

    3.또는 사용하여 두 테이블에 존재하는 유일한 행을 반환 느릅 나무 절을, 존재

    또는 사용하여 두 테이블에 존재하는 유일한 행을 반환 느릅 나무 절을, 존재

    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
    )
    
  4. from https://stackoverflow.com/questions/2657482/sql-find-the-max-record-per-group by cc-by-sa and MIT license