如何用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
相关产品推荐
相关产品推荐

