Sql server SQL Server组中计数的最大值

Sql server SQL Server组中计数的最大值,sql-server,greatest-n-per-group,Sql Server,Greatest N Per Group,因此,我在下面的SQL代码中遇到了一些问题(我还是SQL新手,所以我可能做错了)。现在我想能够计算一个Emp_ID出现在客户ID旁边的次数,然后只显示出现次数最多的Emp_ID Temp table #RAttP |CUST_ID | EMP_NAME | EMP_ID | SOMETHING1 | SOMETHING2 | |:------:|:--------:|:------:|:----------:|:----------:| | 1 | John | 100

因此,我在下面的SQL代码中遇到了一些问题(我还是SQL新手,所以我可能做错了)。现在我想能够计算一个Emp_ID出现在客户ID旁边的次数,然后只显示出现次数最多的Emp_ID

Temp table #RAttP 

|CUST_ID | EMP_NAME | EMP_ID | SOMETHING1 | SOMETHING2 |
|:------:|:--------:|:------:|:----------:|:----------:|
| 1      |   John   |   100  |     w/e    |     w/e    |
| 1      |   John   |   100  |     w/e    |     w/e    |
| 1      |   Jane   |   200  |     w/e    |     w/e    |
| 2      |   Jane   |   200  |     w/e    |     w/e    |
我想要的答案是:

|CUST_ID | EMP_NAME | EMP_ID |
|:------:|:--------:|:------:|
| 1      |   John   |   100  | 
| 2      |   Jane   |   200  |
我的代码是:

SELECT FL2.CUST_ID
       ,#RAttP.EMP_NAME
       ,#RAttP.EMP_ID
       ,FL2.MostSeen
    FROM #RAttP
        INNER JOIN
        (SELECT DISTINCT FL1.CUST_ID
               ,MAX(FL1.AmtSeen) AS MostSeen
            FROM (SELECT #RAttP.CUST_ID
                   ,#RAttP.EMP_NAME
                   ,#RAttP.EMP_ID
                   ,COUNT(EMP_ID) AS AmtSeen
                        FROM #RAttP
                        GROUP BY #RAttP.CUST_ID, #RAttP.EMP_NAME, #RAttP.EMP_ID
                 ) FL1
            GROUP BY FL1.CUST_ID
        )FL2
        ON FL2.CUST_ID = #RAttP.CUST_ID
    GROUP BY FL2.MostSeen, FL2.CUST_ID, #RAttP.EMP_NAME, #RAttP.EMP_ID
    ORDER BY FL2.CUST_ID

您可以使用窗口功能进行以下操作:

SELECT CUST_ID, EMP_NAME, EMP_ID
FROM (
  SELECT CUST_ID, EMP_NAME, EMP_ID, 
         ROW_NUMBER() OVER (PARTITION BY CUST_ID ORDER BY cnt DESC) AS rn
  FROM (
    SELECT CUST_ID, EMP_NAME, EMP_ID,
         COUNT(EMP_ID) OVER (PARTITION BY CUST_ID, EMP_ID) AS cnt
    FROM RAttP ) AS t) AS s
WHERE s.rn = 1

COUNT
CUST\u ID,EMP\u ID
分区上的
OVER
子句一起使用,返回
EMP\u ID
出现在
CUST\u ID
旁边的次数。第二级查询在
行数
窗口函数的
OVER
子句中使用此计数,以确定具有最大
Emp\u ID
外观数的记录。

这可以解决您的问题:

SELECT          * 
FROM 
(
    SELECT          *, rank() OVER (PARTITION BY cust_id ORDER BY cnt DESC) AS rank
    FROM 
    (
        SELECT          cust_id, emp_id, count(1) as cnt
        FROM            #RAttP
        GROUP BY        cust_id, emp_id
    ) AS a
) AS B 
WHERE b.rank=1

对不起,我不明白你的要求。您确定样本数据有意义吗?您要查找的答案甚至不包含您查询中的
MostSeen
列。order by FL2.CUST_ID,count(*)?可能与@TabAlleman重复-甚至没有接近OP的requirementInteresting,我在主题行中问了这个问题,但我根本看不到想要的结果与计数有什么关系。现在这个问题还不清楚。