错误:HAVING的参数必须是boolean类型,而不是double double类型

时间:2014-12-18 08:50:39

标签: postgresql arguments aggregate-functions

我试图在PostgreSQL中执行此查询

  SELECT sum(No_of_Items) AS Total,
         Name FROM All_Bills_of_POS
GROUP BY Name
  HAVING MAX(Total)
ORDER BY Total DESC LIMIT 1";

但是我收到了这个错误:

  

org.postgresql.util.PSQLException:错误:HAVING的参数必须是boolean类型,而不是double double类型

但是这个查询在SQLite中运行良好。如何在PostgreSQL中执行它?

3 个答案:

答案 0 :(得分:3)

你的HAVING子句没有评估为布尔值。我认为你需要这样的东西:

SELECT sum(No_of_Items) AS Total, Name 
FROM All_Bills_of_POS 
GROUP BY Name 
HAVING MAX(Total) > 1
ORDER BY Total DESC 
LIMIT 1

答案 1 :(得分:2)

HAVING MAX(Total)应该有一些条件。例如,

HAVING MAX(Total) > 100

此条件应返回布尔值,即true或false。

答案 2 :(得分:0)

实际上,由于您要检索单行,name项目最多(sum(No_of_Items)},因此您根本不需要HAVING条款。放弃它:

SELECT sum(No_of_Items) AS Total, Name
FROM   All_Bills_of_POS
GROUP  BY Name
HAVING MAX(Total)
ORDER  BY Total DESC, Name  -- tiebreaker
LIMIT  1;

我还添加Name作为额外的ORDER BY项,以确定的方式打破关系:如果多个名称最大值匹配,则按字母顺序排在第一位。

如果您的目标是其他目的,您应该在问题中与我们分享(在任何情况下您都应该这样做)。