代码之家  ›  专栏  ›  技术社区  ›  coldhands

将oracle的Listag转换为postgres

  •  1
  • coldhands  · 技术社区  · 6 年前

    我试图将一些Oracle查询转换为Postgres,并遇到了 listagg .

    甲骨文代码

    select max(eta) eta, mso_id, listagg(carrier_name, ',') 
    within group (order by eta) as carrier 
    from tb_flight_schedule group by mso_id;
    

    我发现博士后相当于 利斯塔格 string_agg 然后开始交换 利斯塔格 具有 字符串_agg .然而,我遇到了错误( 错误:函数字符串_agg(字符变化、未知、日期)不存在 ).我在询问中遗漏了什么吗?Postgres查询如下:

    select max(eta) eta, mso_id, string_agg(carrier_name, ',') 
    WITHIN GROUP (ORDER BY eta) as carrier 
    from tb_flight_schedule group by mso_id;
    
    1 回复  |  直到 4 年前
        1
  •  5
  •   Mureinik    6 年前

    在博士后中 within group 子句仅用于有序集聚合函数,即 要求 order by 子句(例如,百分位函数)。可选的 订购人 子句,例如 string_agg 在函数的参数中:

    SELECT   MAX(eta) eta, mso_id, STRING_AGG(carrier_name, ',' ORDER BY eta) AS carrier 
    FROM     tb_flight_schedule
    GROUP BY mso_id;