1

我有一个包含“状态”整数字段的重复数据集。我想知道是否有某种方法可以将 MAX() 聚合函数“设置”为较低优先级。

我最终要在此数据集上运行查询以对重复项进行分组并选择“max”状态值不是“6”但返回 6 如果它是该值并且没有重复项这个记录。

使用 MAX 是解决此问题的最佳方法还是有更好的方法?

4

3 回答 3

2
select coalesce(max(case when id = 6 then null else id end), max(id))
from (select 6 id union all select 2) a

我同意 Dems 的改进建议,谢谢@Dems

select coalesce(max(nullif(id, 6)), max(id))
from (select 6 id union all select 2) a

如果 'id' 永远不会为空,则 max(id) 可以替换为 6

于 2012-09-17T13:50:43.523 回答
0
declare @T table
(
  Grp int,
  Val int
)

insert into @T values
(2, 1),
(2, 2),
(2, 6),
(6, 6),
(7, 2),
(7, 6),
(7, 7)

select Val
from 
  (
    select Val,
           row_number() over(partition by Grp 
                             order by case when Val = 6 
                                        then 1 
                                        else 0 
                                      end, Val desc) as rn
    from @T 
  ) as T
where T.rn = 1

结果:

Val
-----------
2
6
7
于 2012-09-17T13:53:10.667 回答
0

如果您使用的是 SQL Server,您可能想要探索排名函数。

http://msdn.microsoft.com/en-us/library/ms176102.aspx

使用 Rank Over Partition 查找重复项

于 2012-09-17T13:55:49.760 回答