ウィンドウ関数を使用します。以下は、一時テーブル #people を使用した完全なソリューションです。
-- temp db
を使用 tempdb を使用。
行く
-- テスト テーブルをドロップします。 --テーブル
#people をドロップします。
- 行く
-- テスト テーブルの
作成 create table #people (my_id int, my_gender char(1), my_name varchar(25));
行く
-- #people からのテスト テーブルの削除をクリアします。
-- #people 値(23, 'M', 'Adam'),
(34, 'F', 'Rose')に3 つのカウントを
挿入します。
行く 3
-- #people 値(20, 'M', 'Max'),
(15, 'F', 'Jenny')に2 つのカウントを
挿入します。
行く 2
-- #people 値(20, 'M', 'John'),
(15, 'F', 'Julie')への1 つのカウント
挿入;
行く
-- 性別でトップ 2 をつかみ
ます。
with cte_Get_Top_Two as
(
select ROW_NUMBER() OVER(PARTITION BY my_gender ORDER BY count( ) DESC) AS my_window,
my_gender, my_name, count( ) as total
from #people
group by my_gender, my_name
)
select * from cte_Get_Top_Two where my_window in (1 、 2)
行く
これが出力です。

PS: my_id は問題とは関係ありませんが、解決策は変わらないため、テーブルから my_id を削除できます。