web-dev-qa-db-ja.com

SQL:グループごとの最大レコードを見つける

可能性のある複製:
各グループの最後のレコードを取得する

3つのフィールドとデータを持つ1つのテーブルがあります。

名前、トップ、合計
猫、1、10 
犬、2、7 
猫、3、20 
馬、4、4 
猫、5、10 
犬、6、9 

TotalごとにNameの値が最も高いレコードを選択したいので、結果は次のようになります。

名前、トップ、合計
猫、3、20 
馬、4、4 
犬、6、9 

合計で名前順にグループ化してみましたが、グループ別のレコードの結果が最も多くなっています。誰かが私を案内してくれませんか?

23
user319088
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
31
Tomalak

あなたは次のようなことを試すことができます

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

または、Exists句を使用して、両方のテーブルに存在する唯一の行を返します

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