获取与Group By中的最大计数对应的行

时间:2018-03-21 18:25:40

标签: sql sql-server

我将销售表分为两类:邮政编码和服务类型

ZIPCode  ServiceID  SalePrice
  47103          1      10.43
  47103          2       8.41
  41703          2      52.12
  41703          2      13.31
  69047          1       5.23
  69047          1      14.62
  69047          2      51.62
  90210          2      85.31

我希望将其转换为一个表格,为每个邮政编码提供销售额最高的服务ID以及所述销售数量:

ZIPCode  ServiceID  NumSales
  47103          2         3
  69047          1         2
  90210          2         1

我想我可以找到一种方法来使用联接和多个查询来执行此操作,但是有一种方法我可以在邮政编码上运行GROUP BY并检索与之对应的服务ID最高COUNT

顺便说一下,我正在运行Microsoft SQL Server。

1 个答案:

答案 0 :(得分:2)

使用row_number()

select t.*
from (select zipcode, serviceid, sum(sales) as sales
             row_number() over (partition by zipcode order by sum(sales) desc) as seqnum
      from t
      group by zipcode, serviceid
     ) t
where seqnum = 1;

如果您想要关联,请使用rank()dense_rank()代替row_number()