SqlExceptionHelper:错误:函数计数(字符变化,整数)不存在
我有一个spring应用程序,还有一个本机查询,语法如下:SqlExceptionHelper:错误:函数计数(字符变化,整数)不存在,sql,postgresql,Sql,Postgresql,我有一个spring应用程序,还有一个本机查询,语法如下: select COUNT(DISTINCT person.id,(CASE WHEN salary_person.rating = 'Satisfactory' THEN 1 END)) AS totalSatisfactory, COUNT(DISTINCT person.id,(CASE WHEN salary_person.rating = 'Unsatisfactory' THEN 1 END)) AS t
select
COUNT(DISTINCT person.id,(CASE WHEN salary_person.rating = 'Satisfactory' THEN 1 END)) AS totalSatisfactory,
COUNT(DISTINCT person.id,(CASE WHEN salary_person.rating = 'Unsatisfactory' THEN 1 END)) AS totalUnsatisfactory
from person
join salary_person on person.id = salary_person.person_id;
我得到一个错误:
ERROR: function count(character varying, integer) does not exist
作为数据库,我使用PostgreSQL。我提到在mysql中,查询是有效的。Postgres不支持包含多个列的
count()。但是,您只需使用类似于:(col\u one,col\u two)
-即匿名记录类型的单个列,即可将两列转换为匿名记录类型的单个列
select COUNT(DISTINCT (person.id,(CASE WHEN salary_person.rating = 'Satisfactory' THEN 1 END))) AS totalSatisfactory,
COUNT(DISTINCT (person.id,(CASE WHEN salary_person.rating = 'Unsatisfactory' THEN 1 END))) AS totalUnsatisfactory
from person
join salary_person on person.id = salary_person.person_id;
请注意两列周围的括号
然而,在Postgres中,您有一种更优雅的方式来做您想做的事情,通过使用带有过滤器的条件聚合
子句:
select COUNT(DISTINCT person.id) filter (where salary_person.rating = 'Satisfactory') AS totalSatisfactory,
COUNT(DISTINCT person.id) filter (where salary_person.rating = 'Unsatisfactory') AS totalUnsatisfactory
from person
join salary_person on person.id = salary_person.person_id;