【问题标题】:must appear in the GROUP BY clause or be used in an aggregate function for count postgresql必须出现在 GROUP BY 子句中或用于计数 postgresql 的聚合函数中
【发布时间】:2021-02-28 07:18:48
【问题描述】:
select count(*) from CustomerOrder co where  
 co.createdAt >= :fromDate and co.createdAt <= :toDate order by co.createdAt desc;

我在执行时有超过计数的 HQl 查询,我正在获取 GROUP BY 子句或在聚合函数中使用

【问题讨论】:

  • 我怀疑它抱怨错误中的 createdAt 字段?删除 order by 子句,无论如何它对结果没有影响。

标签: java postgresql hibernate


【解决方案1】:

聚合函数不受 order 子句的影响,因此您无需添加 order by 即可获得正确的结果。 您不能选择未在 group by 中提及且未参与聚合的列。在您的情况下,createdAt 的订单作为 createdAt 被选中,这会引发错误

所以如果你想要你的 where 条件的计数,你只需要

select count(*) 
from CustomerOrder co 
where  co.createdAt >= :fromDate and co.createdAt <= :toDate 

否则,如果您想要每个 createdAt 的聚合结果,那么您必须添加 此列是一个 group by 子句

select createdAt , count(*) 
from CustomerOrder co 
where  co.createdAt >= :fromDate and co.createdAt <= :toDate 
GROUP BY createdAt 

在这种情况下,您会为每个 createdAt 获得一个具有适当计数的行

【讨论】:

  • 也许 count(*) 也应该替换为 count(co) ,因为这是 HQL
猜你喜欢
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 2013-11-05
相关资源
最近更新 更多