我有一个包含重复项的数据集,其中包含'status'整数字段。我想知道是否有某种方法可以将MAX()聚合函数设置为'设置'某些值为较低优先级。
我最终要对此数据集运行查询以对重复项进行分组,并选择“最大”状态值不是“6”的那个,但如果是值,则返回6此记录没有重复。
使用MAX是最好的解决方法还是有更好的方法?
答案 0 :(得分: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'永远不为null,则max(id)可以替换为6
答案 1 :(得分: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
答案 2 :(得分:0)
如果您使用的是SQL Server,则可能需要浏览排名函数。