带有子查询多行的 Postgres CASE

Postgres CASE with Subquery Multiple Rows

我需要从具有全名的列中查询名字(子字符串)。为了统计,当这个名字有多个时,我需要分开,然后,我需要查询下一个名字。

像这样:

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

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

more than one row returned by a subquery

但是是的,它会 return 不止一行

我不知道怎么做。

在此先感谢您的帮助

使用window函数:

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;