首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用分组依据时用于选择最高/最高计数的SQL

使用分组依据时用于选择最高/最高计数的SQL
EN

Stack Overflow用户
提问于 2013-02-12 05:47:07
回答 3查看 1.1K关注 0票数 3

谁可以帮助我的SQL,将返回最高计数的App_ID。我正在运行这个SQL,它返回以下数据集。

代码语言:javascript
复制
SELECT COMP_ID, APP_ID, count(*) as cnt 
FROM APP_ACCT_VIEW
GROUP BY COMP_ID, APP_ID

COMP_ID APP_ID                    CNT
cpo1000c    AT                    999
cpo1kact    AT                    895
cpo1kact    CPOPYMTS_Administrative    1020
cpo1000c    CPOPYMTS_HighValue           1900
cpo1kact    CPOPYMTS_HighValue           1020
cpo1000c    CPOPYMTS_Internal            1999
cpo1kact    CPOPYMTS_Internal            1020
cpo1kact    IRCDR                     1020
cpo1000c    IRCDR                     50

但我需要SQL来返回每个APP_ID的顶部/最高cnt,并需要输出如下所示。

代码语言:javascript
复制
COMP_ID APP_ID                    CNT
cpo1000c    AT                    999
cpo1kact    CPOPYMTS_Administrative    1020
cpo1000c    CPOPYMTS_HighValue           1900
cpo1000c    CPOPYMTS_Internal            1999
cpo1kact    IRCDR                     1020

谢谢迪鹏

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-12 05:50:35

在大多数数据库中,您可以使用row_number()函数来执行此操作:

代码语言:javascript
复制
select comp_id, app_id, cnt
from (select t.*, row_number() over (partition by app_id order by cnt desc) as seqnum
      from (SELECT COMP_ID, APP_ID, count(*) as cnt
            FROM APP_ACCT_VIEW
            GROUP BY COMP_ID, APP_ID
           ) t
     ) t
where seqnum = 1

如果该方法不可用,则必须以其他方式计算seqnum,例如相关子查询。

票数 4
EN

Stack Overflow用户

发布于 2013-02-12 05:52:27

如果您使用的是SQL-Server2005或更高版本,则可以使用带有ROW_NumberDENSE_RANK函数的CTE:

代码语言:javascript
复制
WITH CTE AS
(
   SELECT COMP_ID, APP_ID, 
       CNT = COUNT(*) OVER (PARTITION BY APP_ID, COMP_ID) ,
       RN  = ROW_NUMBER() OVER (PARTITION BY APP_ID ORDER BY CNT DESC) 
    FROM APP_ACCT_VIEW
)
SELECT COMP_ID, APP_ID, CNT
FROM CTE
WHERE RN = 1
票数 4
EN

Stack Overflow用户

发布于 2013-02-12 07:28:21

再多一个选择

代码语言:javascript
复制
 ;WITH cte AS
 (
  SELECT COMP_ID, APP_ID, COUNT(*) AS cnt,
         ROW_NUMBER() OVER(PARTITION BY APP_ID ORDER BY COUNT(*) DESC) AS rn
  FROM dbo.APP_ACCT_VIEW
  GROUP BY COMP_ID, APP_ID
  )
  SELECT COMP_ID, APP_ID, cnt
  FROM cte
  WHERE rn = 1

上的演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14821450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档