sql - 在 Redshift 中使用 DISTINCT 的 listagg

标签 sql amazon-redshift listagg

我正在努力寻找一种在 redshift 中的 listagg 中执行 DISTINCT 的好方法。

我只想列出产品组合,但每一行都应返回不同产品的列表。

示例

期望的输出:

bulb, light
bulb, light, fan

代替:

bulb, bulb, light
bulb, bulb, light, fan

下面是我的SQL:

select
    tit.listagg  
from (
    SELECT
        username,
        listagg(node_name, ',')
        WITHIN GROUP (ORDER BY node_name asc)
    FROM table
    Where node_type not like '%bla bla%'
    GROUP BY username
) as tit
group by listagg;

最佳答案

您可以枚举行然后选择第一行:

select username,
       listagg(case when seqnum = 1 then node_name end, ',') within group (order by node_name asc) 
from (select t.*,
             row_number() over (partition by username, node_name order by node_name) as seqnum
      from table t
      where node_type not like '%bla bla%' 
     ) t
group by username;

这使用了 listagg() 忽略 NULL 值的特性。

关于sql - 在 Redshift 中使用 DISTINCT 的 listagg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969657/

相关文章:

sql - Oracle 中的 LISTAGG 返回不同的值

python - SQLAlchemy 中是否有等效的 LISTAGG WITHIN GROUP?

sql - 甲骨文-ORA-01489 : result of string concatenation is too long

mysql - 如何在从其他表获取数据后更新表

amazon-web-services - 使用 CloudFormation 更改集对正在运行的集群启用 AWS Redshift 加密

mysql - 如果同步到 Redshift/BigQuery,来自 MySQL 数据库的 bin 日志复制是否会保持唯一约束?

csv - 带双引号的 CSV 的引用格式无效(Redshift 加载)

sql - 将数据库对象脚本写入文件的存储过程?

sql - 为什么在这些示例中的 GROUP BY 和 HAVING 子句中使用许多列

MySQL - 将数据从一个表复制到另一个