几种SQL语言(我主要使用postgreSQL)有一个名为coalesce的函数,它返回每行的第一个非空列元素.当表中包含大量NULL元素时,这可以非常有效地使用.
我在R中的许多场景中都遇到过这种情况,当处理不太结构化的数据时,其中包含很多NA.
我自己做了一个天真的实现,但它的速度非常慢.
coalesce <- function(...) {
apply(cbind(...), 1, function(x) {
x[which(!is.na(x))[1]]
})
}
Run Code Online (Sandbox Code Playgroud)
a <- c(1, 2, NA, 4, NA)
b <- c(NA, NA, NA, 5, 6)
c <- c(7, 8, NA, 9, 10)
coalesce(a,b,c)
# [1] 1 2 NA 4 6
Run Code Online (Sandbox Code Playgroud)
coalesce在R中有没有有效的方法?
在WHERE子句中包含输入参数的最佳方法是什么,但如果它为null则将其排除?
我相信有很多方法,但我似乎无法记住.
我也可以使用COALESCE()?但我认为这仅适用于SELECTing值?
为了澄清,让我们说一个变量,@code ="1"然后我会在哪里,Where type='B' AND code = @code但如果@code is null那时我只想要Where type='B'- 注意缺失code = @code.
我想知道代码中的??标志C#.它是为了什么?我该如何使用它?
怎么样int??它是一个可以为空的int吗?
这里有点帮助.我真的不明白如何在MySQL中使用这个coalesce
我已阅读第1页how to use coalsece中谷歌搜索结果中的所有页面.
我知道它的含义是它返回它遇到的第一个非null值,否则返回null.
但它对我来说仍然含糊不清.
coalesce(column1,column2)?如果第一列为空而其他列不为空怎么办?我在存储过程中有一个查询,它在表中汇总了一些值:
SELECT SUM(columnA) FROM my_table WHERE columnB = 1 INTO res;
Run Code Online (Sandbox Code Playgroud)
在此选择之后,我res用另一个查询检索的整数减去值并返回结果.如果WHERE条款得到验证,一切正常.但如果不是,我的所有函数返回都是一个空列(可能因为我试图减去一个空值的整数).
如果WHERE不满足该条款,如何使我的查询返回零?
我有一个存储过程如下:
CREATE PROC [dbo].[Incidents]
(@SiteName varchar(200))
AS
SELECT
(
SELECT SUM(i.Logged)
FROM tbl_Sites s
INNER JOIN tbl_Incidents i
ON s.Location = i.Location
WHERE s.Sites = @SiteName AND i.[month] = DATEADD(mm, DATEDIFF(mm, 0, GetDate()) -1,0)
GROUP BY s.Sites
) AS LoggedIncidents
'tbl_Sites contains a list of reported on sites.
'tbl_Incidents contains a generated list of total incidents by site/date (monthly)
'If a site doesn't have any incidents that month it wont be listed.
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是网站本月没有任何事件,因此当我运行此sproc时,我得到为该网站返回的NULL值,但我需要返回一个零/ 0来在图表中使用在SSRS.
我尝试过使用coalesce并且无效.
SELECT COALESCE(SUM(c.Logged,0))
SELECT SUM(ISNULL(c.Logged,0))
Run Code Online (Sandbox Code Playgroud)
有没有办法正确地格式化? …
所以这就是问题的关键:Foo.Bar可以返回null吗?为了澄清,'_bar'在被评估为非null并且在返回值之前可以设置为null吗?
public class Foo
{
Object _bar;
public Object Bar
{
get { return _bar ?? new Object(); }
set { _bar = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我知道使用以下get方法不安全,并且可以返回null值:
get { return _bar != null ? _bar : new Object(); }
Run Code Online (Sandbox Code Playgroud)
更新:
另一种看待同一问题的方法,这个例子可能更清楚:
public static T GetValue<T>(ref T value) where T : class, new()
{
return value ?? new T();
}
Run Code Online (Sandbox Code Playgroud)
并再次询问GetValue(...)是否会返回null?根据你的定义,这可能是也可能不是线程安全的...我猜正确的问题陈述是询问它是否是一个关于价值的原子操作...... David Yaw已经通过说上面的函数等效来定义问题了以下内容:
public static T GetValue<T>(ref T value) where T : class, new()
{
T result = value;
if …Run Code Online (Sandbox Code Playgroud) 我有很多功能:
String first(){}
String second(){}
...
String default(){}
Run Code Online (Sandbox Code Playgroud)
每个都可以返回一个空值,默认值除外.每个功能可以采用不同的参数.例如,第一个可以不带参数,第二个可以接受一个字符串,第三个可以接受三个参数,等等.我想做的是:
ObjectUtils.firstNonNull(first(), second(), ..., default());
Run Code Online (Sandbox Code Playgroud)
问题在于,由于函数调用,这需要进行急切的评估.我想早点退出,在第二个函数之后说(因为函数调用可能很昂贵,想想API调用等).在其他语言中,您可以执行与此类似的操作:
return first() || second() || ... || default()
Run Code Online (Sandbox Code Playgroud)
在Java中,我知道我可以做类似的事情:
String value;
if (value = first()) == null || (value = second()) == null ...
return value;
Run Code Online (Sandbox Code Playgroud)
由于所有的== null检查,这不是非常易读的IMO.ObjectUtils.firstNonNull()首先创建一个集合,然后迭代,只要该函数被懒惰地评估,这是可以的.
建议?(除了做一堆ifs)
鉴于以下内容:
SELECT ISNULL('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABC (Why?)
SELECT COALESCE('XY' + NULL, 'ABCDEFGHIJ') -- Outputs ABCDEFGHIJ
Run Code Online (Sandbox Code Playgroud)
为什么这些陈述会返回不同的结果?
我有两个字段,我正在与MySQL的函数COALESCE()进行比较.例如,COALESCE(Field1, Field2).问题是,Field1有时是空白但不是null; 因为它不是null COALESCE(),所以选择Field1,即使它是空白的.在那种情况下,我需要它来选择Field2.
我知道我可以在查询中编写一个if-then-else(CASE)语句来检查这个,但是有一个很好的简单函数,比如COALESCE()blank-but-not-null字段吗?
coalesce ×10
null ×3
sql ×3
c# ×2
mysql ×2
sql-server ×2
.net ×1
isnull ×1
java ×1
operators ×1
plpgsql ×1
postgresql ×1
r ×1
sum ×1
t-sql ×1
truncation ×1
where-clause ×1
zero ×1