You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Knex编写含GROUP BY的SQL查询?解决HAVING子句报错

解决Knex实现指定SQL的报错问题

问题根源是PostgreSQL不允许在HAVING子句中引用SELECT列表里定义的别名,你之前的Knex写法自动给count(*)生成了别名cnt,然后直接在HAVING里使用这个别名,导致数据库提示该列不存在。

以下是两种正确的实现方式:

方式一:用havingRaw直接编写聚合条件

knex('users')
  .select('referral_code')
  .count('*')
  .groupBy('referral_code')
  .havingRaw('count(*) > 1')

方式二:通过knex.raw手动指定聚合表达式

knex('users')
  .select('referral_code', knex.raw('count(*)'))
  .groupBy('users.referral_code')
  .having(knex.raw('count(*) > ?', [1]))

这两种写法都会生成符合要求的SQL,核心是在HAVING子句中直接使用count(*)而非它的别名——PostgreSQL(以及多数标准SQL数据库)不支持在HAVING阶段引用SELECT阶段定义的别名。

内容的提问来源于stack exchange,提问作者Capaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:33:19