【SQLServer】最大値を含む行を抽出

テストテーブル作成

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