gpt4 book ai didi

javascript - 在 findAll 中续写计数关联

转载 作者:行者123 更新时间:2023-12-01 15:44:38 25 4
gpt4 key购买 nike

假设您有一个队列表、agent_queues 和代理表。一个代理可以在多个队列中,一个队列可以有多个代理。现在假设您正在尝试获取队列列表以及这些队列中的代理数量。我希望类似以下的工作:

queues.findAll({
include: ['agentQueues'],
group: ['queues.name', 'queues.matcher', 'queues.id'],
attributes: [[Sequelize.fn('count', Sequelize.col('agentQueues.id')), 'agentCount']]
})

相反,它会产生类似的东西:
SELECT "queues".*
FROM (SELECT
"queues"."name",
"queues"."matcher",
"queues"."id",
count("agentQueues"."queueId") AS "agentCount"
FROM "queues" AS "queues"
GROUP BY "name", "matcher", "id"
) AS "queues" LEFT OUTER JOIN "agent_queues" AS "agentQueues" ON "queues"."id" = "agentQueues"."queueId";

其中 group by 和 count 都在子查询中而不是主查询中。我在这里做错了什么?

理想的查询如下所示:
SELECT name, matcher, count(agent_queues."queueId") as agentCount FROM queues
LEFT OUTER JOIN agent_queues ON "agent_queues"."queueId" = queues.id
GROUP BY name, matcher;

我正在寻找的结果是这样的:
[{ name: 'Some Queue', matcher: '1 = 1', agentCount: 2 }]

最佳答案

这是一个有点老的问题,但这个问题也与新版本的 Sequelize 有关。我最好的解决方法是使用 literal而不是 fncount职能。

此代码应生成您期望的 sql 语句。

queues.findAll({
group: ['queues.name', 'queues.matcher'],
attributes: ['name', 'matcher',[literal(`(SELECT count(*) FROM "agentQueues"
WHERE queue."id" = "agentQueues"."queueId"])`, 'agentCount')]]
})

关于javascript - 在 findAll 中续写计数关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47423906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com