如何在postgresql中使用array_agg包含NULL值?
发布时间:2020-12-13 15:56:42 所属栏目:百科 来源:网络整理
导读:如果我查询这个: 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); 我明白了:
如果我查询这个:
SELECT DISTINCT class_low FROM groups NATURAL JOIN species WHERE 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 species WHERE 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和空字符串折叠成一个值,这可能是也可能不是问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |