knex查询错误“pollers.description\”必须出现在group by子句中或用于聚合函数中

fhity93d  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(352)

因此,我有两个表(pollers和errors),我正在尝试连接pollers.id=errors.poller\u id,然后使用pollers.id计算一个poller的错误数。我用过:

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\”必须出现在GROUPBY子句中或在聚合函数中使用

r55awzrz

r55awzrz1#

这个错误似乎很明显。一般来说 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;

也就是说,有一个重要的例外,那就是所谓的“函数依赖性”。可以按主键或唯一键进行聚合,并使用同一表中的其他列。我猜是的 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;

请注意此代码的其他更改:
所有列引用都是限定的,因此您、编译器和任何阅读代码的人都很清楚它们的来源。
表中的缩写用于别名。
双引号将从列别名中删除。不要养成转义列引用的习惯。

相关问题