【问题标题】:working with strings inside of a string_agg使用 string_agg 内的字符串
【发布时间】:2017-04-27 17:42:12
【问题描述】:

在 PSQL 中,我从一个名为 genus_synonym 的表中聚合连接的字符串

表格示例如下

id|genus_synonym|specific_epithet_synonym
---|----------|-----------
1 | Acer | rubrum
2 | Acer | nigrum
3 | Betula | lenta
4 | Carya | ovata
5 | Carya | glabra
6 | Carya | tomentosa

here is an image of my table if that is easier

我使用的代码是这样的

Select

string_agg(CONCAT(CONCAT(s."genus_synonym"), ' ', s.specific_epithet_synonym), ', ')as syno

FROM

 "public"."synonyms" as s

结果是:
Acer rubrum, Acer nigrum, Betula lenta, Carya ovata, Carya glabra, Carya tomentosa

我想弄清楚的是是否可以改为生产这个:

Acer rubrum、A. nigrum、Betula lenta、Carya ovata、C. glabra、C. tomentosa

基本上,我想将属名缩写为一个字母,后面有一个句点,第二次和更多次重复一个属。

即使这是不可能的,知道这一点也会很好,然后如果有其他方法可以解决这个问题。

另外,看起来没有人在回答我的问题。不清楚吗?我以前找不到这样的问题。请让我知道我可以做些什么来改善这个问题。

【问题讨论】:

    标签: psql string-aggregation


    【解决方案1】:

    问:

    t=# with a as (
      select *,case when row_number() over (partition by genus_synonym) > 1 and count(1) over (partition by genus_synonym) > 1 then substr(genus_synonym,1,1)||'.' else genus_synonym end sh
      from s92
    )
    select string_agg(concat(sh,' ',specific_epithet_synonym),',')
    from a;
                                  string_agg
    -----------------------------------------------------------------------
     Acer rubrum,A. nigrum,Betula lenta,Carya ovata,C. glabra,C. tomentosa
    (1 row)
    
    Time: 0.353 ms
    

    模拟您的数据:

    t=# create table s92 (id int,genus_synonym text,specific_epithet_synonym text);
    CREATE TABLE
    Time: 7.587 ms
    t=# copy s92 from stdin delimiter '|';
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1 | Acer | rubrum
    2 | Acer | nigrum
    3 | Betula | lenta
    4 | Carya | ovata
    5 | Carya | glabra
    6 | Carya | tomentosa
    >> >> >> >> >> >> \.
    COPY 6
    Time: 6308.728 ms
    

    【讨论】:

      猜你喜欢
      • 2021-06-26
      • 2020-03-20
      • 2021-05-09
      • 2010-10-17
      • 2020-01-11
      • 2020-11-21
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多