我有一个包含“状态”整数字段的重复数据集。我想知道是否有某种方法可以将 MAX() 聚合函数“设置”为较低优先级。
我最终要在此数据集上运行查询以对重复项进行分组并选择“max”状态值不是“6”但返回 6 如果它是该值并且没有重复项这个记录。
使用 MAX 是解决此问题的最佳方法还是有更好的方法?
我有一个包含“状态”整数字段的重复数据集。我想知道是否有某种方法可以将 MAX() 聚合函数“设置”为较低优先级。
我最终要在此数据集上运行查询以对重复项进行分组并选择“max”状态值不是“6”但返回 6 如果它是该值并且没有重复项这个记录。
使用 MAX 是解决此问题的最佳方法还是有更好的方法?
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
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
如果您使用的是 SQL Server,您可能想要探索排名函数。