sql - postgresql string agg 数字/整数输出结果错误

标签 sql postgresql string-aggregation

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

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'

结果是这样的

result

然后我添加字符串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

有什么想法吗?

最佳答案

这是因为您将数值转换为 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

感谢以下评论者对答案的贡献

关于sql - postgresql string agg 数字/整数输出结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42777208/

相关文章:

mysql - 用 MySQL 5.5.8 编写的存储过程在 5.1 中不起作用

mysql - SQL查询选择相同的数据

sql - PostgreSQL 9.3。没有所有列的分组依据

java - Postgres 9.4.4 值太长,类型字符不同

mysql - 两个连续行中日期之间的差异

sql - PostgreSQL 查询以查找具有匹配数据的行并组合这些行中的列

sql - 从特定数字递增 PK 列(PostgreSQL)

postgresql - 如何创建将循环然后创建sql语句的SELECT STATEMENT?

sqlite - sqlite中的字符串聚合

sql - STRING_AGG 未按预期运行