当前位置: 首页 > 面试题库 >

SqlExceptionHelper:错误:函数计数(字符变化,整数)不存在

葛安和
2023-03-14
问题内容

我有一个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 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_one, col_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中,通过在filter子句中使用条件聚合,您可以采用一种更优雅的方式来执行所需的操作:

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;


 类似资料:
  • 问题内容: 这个psql会话代码段应该是不言自明的: 问题是Postgres函数不喜欢字段类型,但是根据文档,此调用应该是完全正确的吗? 问题答案: 使用显式类型转换: 或更改列输入。 为什么? Postgres允许函数重载。函数签名是由它们的(可选的,由 模式 限定的) 名称 加上 输入参数类型 (的列表)定义的。期望类型的2参数形式 作为第一个参数: 如果没有现有函数 完全 匹配,则“函数类型

  • 我正在做一个大项目,但对于这个问题,我写了一个简单的例子。我有两门课。 和 我得到以下输出: 但我想得到这个:

  • 请你帮忙。为什么昵称对象中的字符串(150)会出现奇怪的错误? 类型错误:续集。字符串不是对象上的函数。(E:\Projects\JavaScript\couponsystem\src\models\schema.js:21:22)位于模块_在对象处编译(internal/modules/cjs/loader.js:688:30)。模块_扩展。。模块处的js(internal/modules/cj

  • 对不起,新手:/。所以当我在“输入你的年龄”中键入一封信时,我有这个问题 输入您的年龄:q 线程“main”java.util.InputMismatchException中出现异常 在java.util.scanner.throwfor(Scanner.java:909) 我想如果我打了任何一个字母,它显示“无效输入”。有人能帮我吗?[对不起,糟糕的英语]

  • 在函数中,我在这一行上有ORA-06502错误: 我看这里没有任何转换问题/完全困惑/