有人知道如何重写下面的SQL查询以生成只包含一个名称的结果吗?(结果按用户分组).

The query

SELECT array_to_string(array_agg(CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

可执行查询在100上可用.

推荐答案

您可以在array_agg中使用distinct关键字:

SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT CONCAT(u.firstname, ' ', u.lastname)), ', ')
FROM log_has_item logitem
  INNER JOIN log log ON log.id = logitem.log_id
  INNER JOIN worker u ON log.worker_id = u.id
WHERE logitem.company_id = 1

SQLFiddle with this example

Sql相关问答推荐

即使缺少某些行,如何查找特定窗口期的平均销售额

Snowflake SQL比较克隆x原始计数

SQL更新,在2个额外的表上使用内部连接

在Oracle SQL中将列值转换为行

从包含PostgreSQL中的JSON值的列中提取列表或目录

在查询Oracle SQL中创建替代ID

在xml.Modify方法中使用子字符串和可能的替代方法

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

Oracle分层查询-两条路径在末尾合并为一条

仅在日期相隔时递增(Oracle SQL)

将两列相加为同一表中的行的查询

基于另一个(SAS、SQL)中的值更新列

如何使用SQL生成数据的滚动3天总和

使用CTE在SNOWFLAKE中创建临时表

不同计数的 Postgres PIVOT 表

使用 union 的有序结果获取行数

PostgreSQL分割字符串为子词并判断其是否存在于其他字符串中

查询以查找今天和昨天的数据之间的差异以及伪列

从每行中排除最大元素

查找距上一条记录大于或等于 30 天的记录