将这两者结合使用的最佳方法是什么?在我的情况下,如果用户ID是null
,我想返回零,并且用户可以拥有多个ID,因此我们希望获得最低(原始)ID。
ISNULL(MIN(UserId),0)
或者,
MIN(ISNULL(UserId),0)
谢谢。
答案是否表明所有综合功能?
答案 0 :(得分:3)
这些陈述不一定产生相同的输出:
快速脚本可以证明这一点:
with testData as (
select 1 as SomeKey, 5 as userID
union all
select 1 as SomeKey, null as userID
union all
select 2 as SomeKey, 6 as userID
union all
select 2 as SomeKey, 5 as userID
)
select
somekey
, isnull(min(userid),0) as firstScenario
, min(isnull(userid,0)) as SecondScenario
from testdata
group by somekey
结果:
Somekey firstScenario secondScenario
1 5 0
2 5 5
第一种情况是你最有可能发生的一种情况,但问题的措辞使得对于所期望的行为有点模棱两可。
(http://sqlfiddle.com/#!6/9eecb7db59d16c80417c72d1e1f4fbf1/10170)
答案 1 :(得分:2)
这取决于你想做什么。但我偏向于COALESCE()
,因为它是ANSI标准函数。
您的两个选择是:
COALESCE(MIN(UserId), 0)
MIN(COALESCE(UserId, 0))
这些不做同样的事情。第一个返回最小用户ID。如果所有用户ID均为NULL
,则此表达式将返回0
。
第二个用NULL
替换每个0
。假设用户ID为正数,则如果任何用户ID为0
,则返回NULL
。
根据我对你的逻辑的理解,你需要第二个版本。
答案 2 :(得分:0)
我想你使用SQL Server
,因为ISNULL是一个T-Sql
函数。
要在DBMS中使用功能,您可以使用COALESCE
NULL
个值。
所以如果你想阻止NULL结果,我建议你使用第一个解决方案
ISNULL(MIN(UserId), 0)