我试图显示默认值"其他",当查询未返回所选列之一的任何结果时。我将向您展示这个例子。
此查询返回os(agent) SO
的空值(在第一行中):
select country, os(agent) SO, count(*) from clicks_data
where country is not null and os(agent) is not null
group by country, os(agent);
输出:
ZA 4
ZA Android 4
ZA Mac 8
ZA Windows 5
相反,我想得到这个结果:
ZA Others 4
ZA Android 4
ZA Mac 8
ZA Windows 5
我的下一次尝试是这个查询,但它并没有真正起作用:
select country, regexp_replace(os(agent),'','Others') SO, count(*) from clicks_data
where country is not null and os(agent) is not null
group by country, os(agent);
结果如下:
ZA Others 4
ZA OthersAOthersnOthersdOthersrOthersoOthersiOthersdOthers 4
ZA OthersMOthersaOtherscOthers 8
ZA OthersWOthersiOthersnOthersdOthersoOtherswOtherssOthers 5
答案 0 :(得分:14)
使用LENGTH()
检查列值的长度。它返回> 0,如果有一些值,则返回0表示空或NULL值。
还在CASE WHEN ... END
块
最终查询可能如下所示:
SELECT country, CASE WHEN LENGTH(os(agent)) > 0 THEN os(agent) ELSE 'Others' END AS SO, COUNT(*)
FROM clicks_data
WHERE country IS NOT NULL AND os(agent) IS NOT NULL
GROUP BY country, os(agent);
希望这能帮到你!!!
答案 1 :(得分:10)
COALESCE将是适合您案例的最佳解决方案
<强>语法:强> COALESCE(VALUE,DEFAULT_VALUE):当值为null时,函数返回默认值,否则为VALUE;
<强>查询强>
SELECT country, COALESCE(os(agent),'Others') AS SO, COUNT(*)
FROM clicks_data
WHERE country IS NOT NULL AND os(agent) IS NOT NULL
GROUP BY country, os(agent);
希望这将是您问题的有效解决方案。
答案 2 :(得分:1)
=''
可能是最简单的方法。
例如
CASE WHEN col='' THEN xxx ELSE yyy END
AS col_new;
答案 3 :(得分:0)
另一种可能的解决方案。如果在导出数据时只想用空字符串替换所有NULL值,则可以通过向df <- fread('
Person_ID Department Date
351581 GH 12/1/2019
351581 GH 12/2/2019
351581 GH 12/3/2019
351581 FR 12/2/2019
598168 GH 12/16/2019
351581 JE 12/8/2019
351581 JE 12/9/2019
615418 AB 12/20/2019
615418 AB 12/22/2019
')
命令输入sql输出
sed
答案 4 :(得分:0)
对于有类似问题的任何人,我想在这里总结一下。
嗯,这是一个相对较老的问题。提供的SQL过滤掉了<h2>STREAMING</h2>
,因此您只需要处理空字符串"_source" : {
"group_words" : [
{
"amount" : 1140,
"words" : [
{
"relevance_score" : 56,
"points" : 66461,
"bits" : 100,
"word_combination" : "cat dog"
},
{
"relevance_score" : 84,
"points" : 45202,
"bits" : 990,
"word_combination" : "cat dog elephant"
},
{
"relevance_score" : 99,
"points" : 30974,
"bits" : 70,
"word_combination" : "elephant cat mouse leopard"
}
],
"group" : "whatever"
},
{
"amount" : 1320,
"words" : [
{
"relevance_score" : 25,
"points" : 53396,
"bits" : 70,
"word_combination" : "lion elephant"
},
{
"relevance_score" : 66,
"points" : 52166,
"bits" : 20,
"word_combination" : "lion mouse fish cat dog"
},
{
"relevance_score" : 82,
"points" : 49316,
"bits" : 810,
"word_combination" : "elephant cat mouse leopard dog lion"
},
{
"relevance_score" : 87,
"points" : 127705,
"bits" : 290,
"word_combination" : "elephant cat mouse leopard tiger lion"
}
],
"group" : "whatever"
},
{
"amount" : 11260,
"words" : [
{
"relevance_score" : 0,
"points" : 37909,
"bits" : 9000,
"word_combination" : "elephant cat mouse leopard tiger lion monkey"
},
{
"relevance_score" : 3,
"points" : 35782,
"bits" : 540,
"word_combination" : "elephant"
}
],
"group" : "whatever"
}
]
。但这与标题冲突,标题明确指出NULL
和空字符串都应考虑。所以我会坚持标题。
""
和NULL
仅适用于COALESCE
,但不适用于空字符串NVL
。
NULL
和""
(以及LENGTH
)都是可行的,因为它们与!=""
和CASE WHEN
兼容。请注意,当NULL
操作的参数之一为""
时,其结果为=
。
还要注意的另一件事是,我们应使NULL
子句中的表达式与NULL
子句中的表达式一致。我的意思是,当您GROUP BY
这样的表达式SELECT
时,您应该SELECT
使用相同的表达式CASE WHEN...
。
这会导致代码重复,可以通过位置别名(自0.11.0版开始)进行改进。因此,最终查询可能是这样的:
GROUP BY