带有多行子查询的Postgres CASE

问题描述

我需要从具有全名的列中查询名字(子字符串)。为了收集统计信息,我需要在这个拳头名称有多个时分开,然后,我需要查询下一个名字。

像这样:

SELECT 
    CASE
        WHEN (SELECT
            count(substring(nome,position(' ' in nome))) as quantidade
            FROM usuarios
            GROUP BY substring(nome,position(' ' in nome))
        ) > 1
         THEN substring(t.nome,position(' ' in t.nome))||' '||split_part(t.nome,' ',2)
        ELSE substring(t.nome,position(' ' in t.nome))
 END AS "Colaborador",

但是我可以这样做,因为我的结果是

子查询返回的一行以上

但是是的,它将返回多个行

我不知道该怎么做。

在此先感谢您的帮助

解决方法

使用窗口功能:

SELECT CASE WHEN cnt = 1
            THEN split_part(nome,' ',1)
            ELSE split_part(nome,1) || ' ' || split_part(nome,2)
       END
FROM (SELECT t.nome,count(*) OVER (PARTITION BY split_part(t.nome,1)) AS cnt
      FROM atable) AS subq;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...