如何在postgresql中使用array_agg包含NULL值?

如何在postgresql中使用array_agg包含NULL值?,第1张

概述如果我查询这个: SELECT DISTINCT class_lowFROM groups NATURAL JOIN speciesWHERE type ~~ 'faune'AND class_high ~~ 'Arachnides'AND (class_middle ~~ 'Araignées' OR class_middle IS NULL)AND (class_low ~~ '%' 如果我查询这个:

SELECT disTINCT class_lowFROM groups NATURAL JOIN specIEsWHERE type ~~ 'faune'AND class_high ~~ 'arachnIDes'AND (class_mIDdle ~~ 'araignées' OR class_mIDdle IS NulL)AND (class_low ~~ '%' OR class_low IS NulL);

我明白了:

class_low      --------------------- DictynIDés linyphiIDés SparassIDés MetIDés ThomisIDés DolomedIDés PisaurIDés araignées sauteuses araneIDés LycosIDés AtypIDés PholcIDés SégestriIDés TetragnathIDés MiturgIDés AgelenIDés

注意NulL值(它不是空的varchar).

现在,如果我这样查询:

SELECT array_to_string(array_agg(disTINCT class_low),',')FROM groups NATURAL JOIN specIEsWHERE type ~~ 'faune'AND class_high ~~ 'arachnIDes'AND (class_mIDdle ~~ 'araignées' OR class_mIDdle IS NulL)AND (class_low ~~ '%' OR class_low IS NulL);

我明白了:

array_to_string                                                                                      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- AgelenIDés,araignées sauteuses,araneIDés,AtypIDés,DictynIDés,DolomedIDés,linyphiIDés,LycosIDés,MetIDés,MiturgIDés,PholcIDés,PisaurIDés,SégestriIDés,SparassIDés,TetragnathIDés,ThomisIDés

未插入NulL值.

有没有办法包括它?我的意思是:

……,…(只是一个双冒号)

解决方法 我没有8.4方便,但在更新的版本中,array_to_string忽略你的NulL所以问题不是array_agg,它是array_to_string.

例如:

=> select distinct state from orders;  state  --------- success failure

该空行实际上是NulL.然后我们可以看到array_agg和array_to_string用这个东西做什么:

=> select array_agg(distinct state) from orders;       array_agg        ------------------------ {failure,success,NulL}=> select array_to_string(array_agg(distinct state),') from orders; array_to_string ----------------- failure,success

并且NulL在array_to_string调用中消失. documentation没有指定对NulL的任何特定处理,但忽略它们似乎与其他任何东西一样合理.

在版本9.x中,您可以像往常一样使用COALESCE:

=> select array_to_string(array_agg(distinct coalesce(state,'')),') from orders; array_to_string  ------------------,failure,success

所以这可能适合你:

array_to_string(array_agg(disTINCT coalesce(class_low,')

当然,这会将NulL和空字符串折叠成一个值,这可能是也可能不是问题.

总结

以上是内存溢出为你收集整理的如何在postgresql中使用array_agg包含NULL值?全部内容,希望文章能够帮你解决如何在postgresql中使用array_agg包含NULL值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1159412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存