1

我正在汇总数据,我无法对某些列求和,因此我想从该列或众数值中获取最频繁的观察结果。每个 ID 只能有一个站点和一个号码,因此如果有平局,则选择两个号码中较小的一个。

示例如下:

ID site  number

1  3     45

1  3     45

1  2     56

1  3     56

2  4     5

2  5     5

2  5     3

2  5     5

我希望它看起来像:

ID site  number

1  3     45

2  5     5
4

1 回答 1

0

这是一种方法:

with aggregation as
(
  select id
    , site
    , number
    , numberCount = count(1)
  from SiteNumbers
  group by id
    , site
    , number
), aggregateRanks as
(
  select *
    , idRank = row_number() over (partition by id order by numberCount desc, number, site)
  from aggregation
)
select id
  , site
  , number
from aggregateRanks
where idRank = 1

SQL Fiddle 与演示

它与您的结果相匹配,但根据您的所有不同情况,可能需要进行一些调整;希望它能给你一些想法。

于 2013-06-13T13:18:54.797 回答