テストテーブル作成
SQL
--テストテーブル作成
create table #test
(
[group] varchar(MAX),
[score] int
)
--テストデータ挿入
insert into
[#test]
values
('A',78),
('A',91),
('A',65),
('B',72),
('B',98),
('B',69),
('C',81),
('C',74),
('C',81),
('C',29)
グループ毎の最大値を含む行を抽出
SQL
SELECT
*
FROM
(
SELECT
*,
RANK() OVER(PARTITION BY [group] ORDER BY [score] DESC) as [RANK]
FROM
[#test]
) as [a]
WHERE
[RANK] = 1
結果
group score RANK
A 91 1
B 98 1
C 81 1
C 81 1
※gropu"C"の結果を単一にしたい場合は"RANK"を"ROW_NUMBER"に変更する。
全体の中で最大値を含む行を抽出
SQL
select
*
from
[#test]
where
[score] = (select MAX([score]) from [#test])
結果
group score
B 98