带有子查询多行的 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;
我需要从具有全名的列中查询名字(子字符串)。为了统计,当这个名字有多个时,我需要分开,然后,我需要查询下一个名字。
像这样:
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;