「ステータス」整数フィールドを含む重複のあるデータセットがあります。MAX() 集計関数を設定して、特定の値をより低い優先度に「設定」する方法があるかどうか疑問に思っていました。
私が最終的に求めているのは、このデータセットに対してクエリを実行して重複をグループ化し、「6」ではない「最大」ステータス値を持つものを選択することですが、それが値であり、重複がない場合は 6 を返しますこの記録。
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」が null でない場合、max(id) は 6 に置き換えることができます
SQL Serverを使用している場合は、ランク関数を調べることをお勧めします。
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