加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在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和空字符串折叠成一个值,这可能是也可能不是问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读