如何获得表中最常见的值

时间:2017-02-14 17:01:25

标签: sql-server group-by aggregate-functions

我使用的是MS SQL Server 2010。 我有一个包含数百万行的表,如下所示:

Number      |  SITE    |Events_Work |Events_Nonwork
----------  | -------- | ---------  | ------------
1234567     | 1508     | 1          |  4
1234567     | 8263     | 1          |  0
1234567890  | 1905     | 0          |  1
1234567890  | 1697     | 0          |  0
1234567890  | 1697     | 1          |  0
22222222    | 2151     | 2          |  2
22222222    | 1905     | 3          |  1
22222222    | 1575     | 0          |  0
22222222    | 1575     | 4          |  1
1234567     | 1475     | 0          |  0
1234567     | 1110     | 0          |  0
1234567     | 1508     | 0          |  0

我应该根据以下各项找到最常用的SITE:工作时事件的SUM(Events_Work)和evenets Non_work_time的SUM(Events_Nonwork)。

有任何建议如何做到这一点?

2 个答案:

答案 0 :(得分:0)

尝试使用窗口函数为每个数字中的每个网站找到两列的总和并对其进行排名:

select *
from (
    select t.*,
        rank() over (
            partition by number order by s desc
            ) rnk
    from (
        select t.*,
            sum(coalesce(events_work, 0) + coalesce(events_nonwork, 0)) over (
                partition by number,
                site
                ) s
        from your_table t
        ) t
    ) t
where rnk = 1;

答案 1 :(得分:0)

with tmp1 as (
  select Number, Site,  eventsw + eventsNW total
  from YourTable 
  group by Number, Site, eventsw + eventsNW
)
select Number, Site, max(total)
from tmp1 
group by Site, Number

如果我理解你的问题,这应该是你想要的。