Mik*_*ain 2 t-sql sql-server sql-server-2008 window-functions
我有这样一张桌子:
ID Group Gender
------------------
1 A M
2 A M
3 A F
4 A M
5 A U
6 B F
7 B F
8 B M
9 C U
10 C F
11 C U
Run Code Online (Sandbox Code Playgroud)
我正在尝试计算每个性别的模式组.换句话说,对于每个性别,请告诉我哪个是最受欢迎的群体.所以我想要的结果如下:
Gender ModeGroup
-----------------
M A (because 3 males in group A, 1 in B and 0 in C)
F B (because 2 females in group B, 1 in A and 1 in C)
U C (because 2 unknown in group C, 0 in B and 1 in C)
Run Code Online (Sandbox Code Playgroud)
在平局的情况下,我需要为每个绑定组返回一条记录.
如何在TSQL中优雅地完成这项工作?我想我需要使用一个窗口函数,但我一直在努力解决它.
这是我的No-CTE解决方案:
SELECT
Gender,
[Group]
FROM
(
SELECT
[Group],
Gender,
RANK() OVER(PARTITION BY Gender ORDER BY [Count] DESC) AS [Rank]
FROM
(
SELECT [Group], Gender, SUM(1) AS [Count]
FROM GroupGender
GROUP BY [Group], Gender
) AS counts
) AS ranks
WHERE
[Rank] = 1
Run Code Online (Sandbox Code Playgroud)
更新:(见评论)