【问题标题】:How to select a max row for each group in SQL如何在 SQL 中为每个组选择最大行
【发布时间】:2014-05-12 05:00:10
【问题描述】:

我希望选择“grpid”的最大值为“Value”的国家/地区。在检查最大值时,不应将已选择的“国家”用于其他“grpid”。 (即 Country 或 grpid 不应在结果中重复)

SQL Fiddle

结果:

Country    grpid        Value           Row_number

US        49707        604456458         1
GB        5086         497654945         4 
CA        909          353500201         10
JP        231          198291290         15

【问题讨论】:

  • 在结果中不应重复国家或 grpid... 在您的结果中“GB”和“US”正在重复。 1) 为 'grpid' 选择最大值为 'Value' 的国家 2) 'grpid' & country 不应重复。 3)如果'grpid'没有最高值,我们需要取下一个最大值。
  • 你为什么不包括 grpid '50147'

标签: sql sql-server sql-server-2008 tsql greatest-n-per-group


【解决方案1】:

试试这个查询,

  WITH OrderedOrders AS
  (
     SELECT country,grpid,value,ROW_NUMBER() OVER(PARTITION BY country ORDER BY   country,value DESC) AS 'RowNumber' 
     FROM test1
  ) 
 select * from  OrderedOrders
 where RowNumber =1

【讨论】:

  • 非常适合我。
【解决方案2】:

我相信这就是您正在寻找的:

SQL Fiddle

;with cte as 
(
  select 
      country,
      max(value) as MaxVal,
      min(row_number) as MinRow
  from test1
  group by Country
)
select 
  c.country,
  t.grpid,
  c.MaxVal,
  c.MinRow
from cte c
join test1 t
  on t.country = c.country 
  and t.value = c.MaxVal
  and t.row_number = c.MinRow
order by country, grpid

【讨论】:

  • 通过展示如何使用 with 关键字来进行简单的自我加入,这很有用并且链接更新。 +1
【解决方案3】:

你能试试这个查询吗

select 
    country,
    value,
    grpid,
    count(*) 
from test1 
group by  
    country,
    value,
    grpid 
order by 
    country,
    value desc

【讨论】:

  • 谢谢,这不会输出结果:Country grpid Value Row_number US 49707 604456458 1 GB 5086 497654945 4 CA 909 353500201 10 JP 231 198291290 15 结果中的 Country 或 grpid 不应重复...结果“GB”和“US”重复。 1) 为 'grpid' 选择最大值为 'Value' 的国家 2) 'grpid' & country 不应重复。 3)如果'grpid'没有最高值,我们需要取下一个最大值。
  • 在结果中不应重复国家或 grpid... 在您的结果中“GB”和“US”正在重复。 1) 为 'grpid' 选择最大值为 'Value' 的国家 2) 'grpid' & country 不应重复。 3)如果'grpid'没有最高值,我们需要取下一个最大值。
  • 你能把国家从组中删除并选择列表试试吗?
猜你喜欢
  • 2012-01-04
  • 2013-04-04
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2013-06-24
  • 1970-01-01
相关资源
最近更新 更多