Knex查询错误"pollers.description\" must appear in the GROUP BY clause or be used in an aggregate function”

Knex query error "pollers.description\" must appear in the GROUP BY clause or be used in an aggregate function"

所以我有 2 个表(轮询器和错误)我正在尝试加入 pollers.id = errors.poller_id 的位置,然后使用 pollers.id 计算轮询器的错误数.我用过:

 knex.raw(`select poller_name, description, count(pollers.id) as "poller_errors" 
from pollers
inner join 
errors on pollers.id = errors.poller_id 
group by poller_name`)

出现错误"pollers.description\"必须出现在 GROUP BY 子句中或用于聚合函数

错误似乎很明显。作为一般规则,select 中的未聚合列需要在 group by 中。所以就把它们放在那里:

select poller_name, description, count(pollers.id) as "poller_errors"
from pollers inner join
     errors
     on pollers.id = errors.poller_id
group by poller_name, description;

也就是说,有一个重要的例外,它的别名是 "functional dependency"。您可以按主键或唯一键进行聚合,并使用同一 table 中的其他列。我猜 pollers.id 是唯一键。如果是这样,你可以这样写:

select p.poller_name, p.description, count(*) as poller_errors
from pollers p inner join
     errors e
     on p.id = e.poller_id
group by p.id;

注意此代码的其他更改:

  • 所有列引用都是合格的,因此您、编译器和任何阅读代码的人都清楚它们的来源。
  • Table 缩写用于别名。
  • 双引号已从列别名中删除。不要养成转义列引用的习惯。