【问题标题】:postgresql string agg numeric/integer output result is wrongpostgresql 字符串 agg 数字/整数输出结果错误
【发布时间】:2017-03-14 03:20:33
【问题描述】:

正如标题所说,我需要使用此查询(无字符串 Agg)将结果查询与字符串 agg 连接起来

select pdet.dept_id, pdet.grade_id
from psa_aso_target ptar
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'

结果是这样的

然后我添加字符串 agg

select pdet.dept_id, string_agg(distinct pdet.grade_id::char,'|') as grade
from psa_aso_target ptar
inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'
group by pdet.dept_id

我希望结果是

dept_id | grade_id
      2 | 1|2|3
      3 | 4|13|14|15|18
      5 | 6|10|17
     63 | 2|4|7

但我得到的结果是

dept_id | grade_id
      2 | 1|2|3
      3 | 1|4
      5 | 1|6
     63 | 2|4|7

有什么想法吗?

【问题讨论】:

    标签: sql postgresql string-aggregation


    【解决方案1】:

    这是因为您将数值转换为 char(1)。通过将其转换为 char(1),您可以将值仅截断为 1 个字符,因此 13、14、15、18 都变为 1

    您需要将其转换为 varchar 或文本:

    select pdet.dept_id, string_agg(distinct pdet.grade_id::varchar,'|') as grade
    from psa_aso_target ptar
    inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'
    group by pdet.dept_id
    
    select pdet.dept_id, string_agg(distinct pdet.grade_id::text,'|') as grade
    from psa_aso_target ptar
    inner join psa_aso_targetdetails pdet on pdet.target_id=ptar.target_id and ptar.branch_id='18'
    group by pdet.dept_id
    

    感谢下面的评论者为答案做出贡献

    【讨论】:

    • 或者直接投到::text
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2015-10-17
    • 2020-05-08
    相关资源
    最近更新 更多