当查询不返回任何选定列的结果时,我试图显示一个默认值“others”。我给你举个例子。
此查询返回的值为空 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
5条答案
按热度按时间b5buobof1#
=''
也许是最简单的方法。例如。lg40wkob2#
合并将是最适合您的情况和最佳的解决方案
语法:coalesce(value,default\u value):当value为null或value时,函数返回默认值;
查询
希望这能有效解决你的问题。
fafcakar3#
另一个可能的解决方案。如果您想在导出数据时简单地用一个空字符串替换所有空值,您可以这样做,方法是将
sed
命令sql的输出信用
knsnq2tg4#
使用
LENGTH()
检查列值的长度。它返回>0,如果有其他值,则返回0作为空值或空值。同时在中框显列值
CASE WHEN ... END
块最终查询可能如下所示:
希望这对你有帮助!!!
k4ymrczo5#
对于有类似问题的人,我想在这里总结一下。
嗯,这是一个比较老的问题。提供的sql过滤掉
NULL
,所以您只需要处理空字符串""
. 但这与书名冲突,书名明确指出了两者NULL
应该考虑空字符串。所以我还是用标题吧。COALESCE
以及NVL
仅适用于NULL
,但对空字符串无效""
.两者
LENGTH
以及!=""
(以及CASE WHEN
)是可行的,因为它们与NULL
以及""
. 注意,当=
操作是NULL
,其计算结果为NULL
.还有一件事需要注意的是我们应该在
GROUP BY
条款符合SELECT
条款。我的意思是,当你SELECT
像这样的表情CASE WHEN...
,你应该GROUP BY
同样的表情CASE WHEN
.这会导致代码重复,这可以通过positionalias(从版本0.11.0开始可能)来改进。所以最后的问题可能是这样的: